我在Windows机器上安装了Git,并且设置了几个使用密码进行身份验证的git用户。但是,在本地Windows机器上执行的所有git命令(例如,git pull)(通过git bash)不需要身份验证。来自该shell的提交将作者显示为“未知”。虽然我知道user name and email can be set阻止了“未知”的提交,但我想强制执行身份验证,以便用户必须在任何git操作之前登录。
其次,如何将“未知”作者与现有用户合并,以便合并提交历史记录?
答案 0 :(得分:1)
关于问题的第2部分:有git filter-branch
命令可以让你重写Git历史记录。用法:
git filter-branch --env-filter '
oldname="(old name)"
oldemail="(old email)"
newname="(new name)"
newemail="(new email)"
[ "$GIT_AUTHOR_EMAIL" = "$oldemail" ] && GIT_AUTHOR_EMAIL="$newemail"
[ "$GIT_COMMITTER_EMAIL" = "$oldemail" ] && GIT_COMMITTER_EMAIL="$newemail"
[ "$GIT_AUTHOR_NAME" = "$oldname" ] && GIT_AUTHOR_NAME="$newname"
[ "$GIT_COMMITTER_NAME" = "$oldname" ] && GIT_COMMITTER_NAME="$newname"
' HEAD
有关详细信息,请在github上查看git docs或此dedicated article。
如果您将许多现有用户标识为“未知”,则可能会非常痛苦。
关于第一部分,我会:
答案 1 :(得分:0)
由于将来可能会有更多重复的git用户(名称或电子邮件变体),我决定使用 .mailmap 文件。以下是我用来解决问题的方法:
Git bash到本地git存储库并打印出一个提交者列表
git shortlog -sne
确定要合并的提交名称集。在存储库的根目录:
touch .mailmap
vi .mailmap
以这种格式输入:
Proper name 1 <name1@example.com> unknown1 <badname1@example.com>
Proper name 1 <name1@example.com> unknown2 <badname2@example.com>
Proper name 2 <name2@example.com> unknown3 <badname3@example.com>
进行验证,现在应合并名称:
git shortlog -sne