为什么更改我的 SSH 密钥不会为我的提交显示正确的作者?

Why doesn't changing my SSH key make the correct author be shown for my commits?

我在处理我机器上两个不同的 SSH 密钥时遇到了一些问题。我有两个 GitHub 具有不同用户名和 ssh 密钥的帐户。

我在我的 GitHub @ zshap/test-push 上有一个私有目录,奇怪的是,当我更改自述文件并将其推送时,我看到了来自我的 zackshapiro 用户的提交,他不是协作者,但尚未被邀请加入该存储库。

我不明白我的其他用户如何能够推送到 zshap 的私人仓库。

为了更好的衡量,这些帐户也有不同的个人资料图片,因此很容易识别出 zackshapiro 已推送到 zshap 存储库。

另外,我使用这些别名在终端中设置我的 ssh 密钥:

alias ssh-personal="ssh-add -D; ssh-add -K ~/.ssh/key1"

alias ssh-zshap="ssh-add -D; ssh-add -K ~/.ssh/key3"

另外,我删除了 SSH 密钥 key2,并使用 GitHub 创建了一个新的 key3' s 教程,以防我不小心将现有密钥上传到 GitHub。此外,我已确保 GitHub 设置的 SSH 和 GPG 密钥部分中显示的签名完全不同。

我的~/.ssh/config:

Host zackshapiro
    HostName github.com
    User git
    IdentityFile ~/.ssh/key1
    IdentitiesOnly yes

Host zshap
    HostName github.com
    User git
    IdentityFile ~/.ssh/key3
    IdentitiesOnly yes

Host *
  AddKeysToAgent yes
  UseKeychain yes

这非常令人困惑,关于如何在一台机器上使用多个 ssh 密钥的其他答案似乎没有解决这种特殊情况。我希望在这里得到一些帮助,所以我不会越过这些电线。

谢谢!

编辑

如果我 运行 ssh -T,我在这里得到了正确的用户名,所以提交来自我的其他用户和 ssh 密钥是非常奇怪的

$ ssh -T git@github.com
Hi zshap! You've successfully authenticated, but GitHub does not provide shell access.

编辑 2

在我的 foo 回购目录中,我可以 运行 ssh-personal 然后 git push 推送一个新的提交,我得到错误(正确):

ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.

然后当我运行ssh-zshapgit push时,我可以成功推送但是提交消息来自错误的用户!是由 zackshapiro GitHub 用户而不是 zshap 用户。

AuthorCommitter 字段由 git 本身设置,而不是由 github 设置,当您第一次 运行 git commit创建一个提交。该提交中的所有内容都成为提交哈希的一部分,因此如果不使该提交和引用它的所有其他提交都无效(或者至少重写所有受影响的提交以由新的和不同的哈希标识) ).因此,用于向 github 进行身份验证的 SSH 密钥无法更改提交本身。

如果你想为 git 的目的设置你的身份,你可以通过几种方式来实现,如下所示(按优先顺序排列)(所以如果设置了多个,则前面的那个列表获胜):

  • 通过 GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL 的环境。一个重要的注意事项:在执行 git commit --amend 时,使用这些可以覆盖 作者和提交者的预先存在的值;通常只有提交者在修改期间被更新。
  • 通过 yourproject/.git/config 中的每个项目配置,可以使用 git config user.name "Your Name"; git config user.email "your.email@example.com"
  • 进行修改
  • 通过 ~/.gitconfig(或 $XDG_CONFIG_HOME/git/config)中用户特定的“全局”配置,可以使用 git config --global user.name "Your Name"; git config --global user.email "your.email@example.com" 进行修改。用于检索它的位置可以用环境变量 GIT_CONFIG_GLOBAL.
  • 覆盖
  • 通过 /etc/gitconfig 中的系统范围配置。用于检索它的位置可以用环境变量 GIT_CONFIG_SYSTEM.
  • 覆盖

如果您想要在多个全局配置文件之间进行交换,请考虑使用 GIT_CONFIG_GLOBAL 配置文件为 ~/.gitconfig 指定备用位置,具体取决于您希望在某个位置激活哪个配置文件给定时间。

如果您想向其他人证明您的身份,这就是签名提交 的目的,该功能要求您设置 OpenPGP 密钥对。