如何从同一系统帐户推送到与多个用户相同的来源(使用SSH密钥)?

时间:2015-10-02 00:07:21

标签: git ssh gitlab

我正在努力使Specify an SSH key for git push for a given domain适应我的问题。我的情况不同的是,我不想推送到多个域,但总是与一个(Unix)帐户中的多个(Git)用户在同一个域中。

~/.ssh/config设置为每个用户都有一个条目:

Host git-as-bob
  HostName git.domain.tld
  User git
  IdentityFile /home/shared/.ssh/id_rsa-bob
  IdentitiesOnly yes

Host git-as-alice
  HostName git.domain.tld
  User git
  IdentityFile /home/shared/.ssh/id_rsa-alice
  IdentitiesOnly yes

在一个存储库中,我已经进行了必要的更改,推送工作正常(注意:只说git push应该不起作用,这就是第一个命令的用途。这没什么关系但是,因为默认的pubkey只对存储库具有读访问权。)

$ git remote set-url --push origin no_push
$ git remote add origin-bob git@git-as-bob:/repository1.git
$ git remote add origin-bob git@git-as-bob:/repository1.git

此处发生以下情况:

$ git push origin-bob master
Everything up-to-date

在第二个存储库中,我做了完全相同的事情,但结果却不同:

$ git push origin-bob master
To git@git-as-bob:/repository2.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@git-as-bob:/repository2.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

请注意,git remote -v在两种情况下都返回几乎相同(即,唯一的区别是“repository1.git”与“repository2.git”。另请注意,在推送之前,两个存储库都与在这里显示的例子中,实际上没有任何东西可以推动,但如果存在,则会出现同样的问题。

如果这是一种合理的方法,我该如何排除故障?如果不是,那么进行这样设置的适当方式是什么?

1 个答案:

答案 0 :(得分:1)

  

我甚至尝试过rm -rf目录,然后git克隆它们。没有改变任何事情。

这确实无法改变:拒绝错误是因为远程方面的内容。
如果您完全掌控了这些回购(并在当地回购中拥有正确的历史记录),解决问题的最快方法是:

git push --force origin-bob master

您的远程仓库将具有相同的历史记录。

OP Rainer Verteidiger添加in the comments

  

事实证明我添加了一些但不是所有的新遥控器都有错误   做完之后,一切都按我的方式工作。