假设您想让机器访问您的一个存储库,但不是所有存储库。这是合情合理的事情,因此 GitHub 提供了部署密钥。但是,如果您想让它访问两个存储库怎么办?
尝试自然的方法是将相同的公钥添加到您的第二个存储库中,但 GitHub 拒绝这样做:
错误:密钥已在使用中
我认为这个错误是因为他们不希望您陷入多台机器使用相同密钥的情况。如果发生这种情况并且您需要撤销一台机器的访问权限,那么您将被卡住。然而,在这种情况下,我们只有一台机器,并且我们试图对两个 repos 使用相同的密钥。我没有看到该设置有任何问题,虽然我可能没有足够的想象力,但我认为 GitHub 可能应该基于每个 repo 而不是全局检查重复的部署密钥?
尽管如此,我们可以用 GitHub 做些什么呢?生成更多密钥并使用别名!
假设您从头开始尝试检查github.com/you/repo1
和github.com/you/repo2
,我将逐步介绍这一点。如果您已经有repo1
并且不介意以不同方式配置两个 repo,只需按照repo2
步骤操作即可。
首先,为每个 repo 生成一个 ssh 密钥:
$ ssh-keygen -t ed25519 -C "machineName-repo1" 输入保存密钥的文件:/home/you/.ssh/id_ed25519.repo1 ... $ ssh-keygen -t ed25519 -C "machineName-repo2" 输入保存密钥的文件:/home/you/.ssh/id_ed25519.repo2 ...
然后访问github.com/you/repo1/settings/keys
和github.com/you/repo1/settings/keys
并分别粘贴~/.ssh/id_ed25519.repo1
和~/.ssh/id_ed25519.repo2
的内容。
此时您已经创建了密钥并告诉 GitHub 尊重它们,但您还没有告诉您机器上的ssh
何时使用哪个密钥。您在~/.ssh/config
中执行此操作:
主机 github-repo1 主机名 github.com 用户 git 身份文件 ~/.ssh/id_ed25519.repo1 身份只有是 主机 github-repo2 主机名 github.com 用户 git 身份文件 ~/.ssh/id_ed25519.repo1 身份只有是
无论如何,现在您可以查看您的存储库:
$ git clone github-repo1:you/repo1.git $ git clone github-repo2:you/repo2.git
这样做的原因是git
和其他任何使用ssh
的东西一样,实际上并没有解释主机名或建立连接。它只是询问ssh
“请把我连接到github-repo1
”,并且ssh
将使用别名作为弄清楚如何做到这一点的一部分。这也意味着几乎任何时候您可能使用过GIT_SSH_COMMAND
或以其他方式将参数传递给ssh
,别名是更好的选择。
但是,如果您已经检查了您的 repo,而不是再次检查它,您只需更改origin
位置:
$ cd repo1 $ git remote set-url origin github-repo1:you/repo1.git
和repo2
一样。