Git:强制执行身份验证并禁用“未知”提交者

时间:2015-11-26 07:08:36

标签: windows git bash authentication login

我在Windows机器上安装了Git,并且设置了几个使用密码进行身份验证的git用户。但是,在本地Windows机器上执行的所有git命令(例如,git pull)(通过git bash)不需要身份验证。来自该shell的提交将作者显示为“未知”。虽然我知道user name and email can be set阻止了“未知”的提交,但我想强制执行身份验证,以便用户必须在任何git操作之前登录。

其次,如何将“未知”作者与现有用户合并,以便合并提交历史记录?

2 个答案:

答案 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. 在git config中检查user.nameuser.email。没什么 与凭证有关,但git使用它们来存储作者身份 信息。你可能需要设置它们(作为全局的 使用git config --global用于每个存储库,或者用作 基于存储库的git config}。
  2. 检查git是否不使用任何凭证助手以避免重复。 (git config -l),如果确实如此 - 删除它(我相信git config --global --unset credential.helper但我确定)。
  3. 您可能需要查看thisthis个答案。

答案 1 :(得分:0)

由于将来可能会有更多重复的git用户(名称或电子邮件变体),我决定使用 .mailmap 文件。以下是我用来解决问题的方法:

  1. Git bash到本地git存储库并打印出一个提交者列表

    git shortlog -sne

  2. 确定要合并的提交名称集。在存储库的根目录:

    touch .mailmap

    vi .mailmap

  3. 以这种格式输入:

    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>

  4. 进行验证,现在应合并名称:

    git shortlog -sne