如何解决如何确保提交包含共享 git 存储库中的特定用户信息而不是组电子邮件 ID?
我们有一个开发服务器,团队成员使用通用的 unix 用户登录并在同一个存储库上工作。每个团队成员可以克隆到不同的存储库并使用他/她的身份配置本地 git 用户身份并删除全局 git 用户身份。但是,无论他们如何工作,强制每个提交都具有特定用户身份而不是通用 unix 用户身份的最佳方法是什么?我正在考虑使用预接收服务器挂钩来检查有效的 user.name
和 user.email
。我如何做到这一点?我使用本地 GitLab。任何建议和见解表示赞赏。
解决方法
GitLab 是否允许您安装自己的钩子?如果是这样,您只需阅读 pre-receive
挂钩并编写类似的内容。此示例是 perl
,但您可以使用 bash
或任何您喜欢的名称。
#!/usr/bin/perl
while(<STDIN>)
{
my ($commit_old,$commit_new,$commit_ref) = ($_ =~ m/^(.*?)\s(.*?)\s(.*)$/);
open(CHUNKS,"git rev-list --first-parent $commit_old..$commit_new |");
while(my $commit_chunk = <CHUNKS>)
{
chomp $commit_chunk;
my $cn = `git --no-pager show -s --format='%cn' $commit_chunk`; chomp $cn;
my $ce = `git --no-pager show -s --format='%ce' $commit_chunk`; chomp $ce;
my $an = `git --no-pager show -s --format='%an' $commit_chunk`; chomp $an;
my $ae = `git --no-pager show -s --format='%ae' $commit_chunk`; chomp $ae;
if (! .. check author name,author email,committer name,committer email however you like against the common identity ...)
{
print("Hey you,that's wrong. How many times I have to tell you not to use the common identity?!?!\n;");
exit 1;
}
}
}
exit 0;
(为清楚起见,删除了错误检查,以及检查新分支(repo 中已经有和没有提交)、删除的分支等。正如他们所说,这些是“留给读者的练习”。 )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。