配置多个git帐户时更新子模块

时间:2013-06-01 18:18:53

标签: git github

我有两个git身份,一个是个人身份,另一个是我的雇主。

我的工作项目使用子模块,虽然我可以克隆主回购,但我无法更新子模块。我需要配置什么才能在本地更新子模块而不会出现以下错误?

Fetching origin
From github.com:/work_domain/work_submodule
 * branch            HEAD       -> FETCH_HEAD
error: pathspec 'master' did not match any file(s) known to git.

我的〜/ .ssh目录中有两组id_rsa键:

id_rsa.pub <= personal ssh key
id_rsa_work.pub <= work ssh key

〜/ .ssh / config file:

#work acccount
Host github-work
  HostName github.com
  User git (corrected with info from answers)
  IdentityFile ~/.ssh/ida_rsa_work

#personal account
Host github-personal
  HostName github.com
  User git
  Identity ~/.ssh/ida_rsa

当我最初成功克隆我的工作回购时,我使用了调整后的主机映射:

git clone git@github-work:work_domain/repo_name.git

而不是我在工作时通常使用的东西:

git clone git@github.com:work_domain/repo_name.git

在工作项目仓库中,.gitmodules文件当然有官方映射:

[submodule "work_submodule"]
        path = work_submodule
        url = git@github.com:/work_domain/work_submodule.git

根据以下建议,我将.gitmodules属性更新为:

[submodule "work_submodule"]
        path = work_submodule
        url = git@github-work:/work_domain/work_submodule.git

但仍无法在本地更新子模块。

2 个答案:

答案 0 :(得分:2)

为了防止意外将子模块的私有URL提交到存储库(取决于您的.ssh/config),您应该编辑{{1}中的网址}}

编辑.git/ssh文件中的URL以使用 github-work 是一种方法。但是,由于这是项目的文件部分,因此可能会错误地提交。

而是@Chronical在评论中提到的。要仅更改特定结帐的本地设置,您应该更改.gitmodules

中的网址
.git/config

通过更改它而不是url = github-work:/work_domain/work_submodule.git ,您可以摆脱额外的步骤来清理意外使用错误网址的内容

请注意,如果您执行.gitmodules git submodule sync中编辑的网址将被.git/config

中的网址覆盖

答案 1 :(得分:0)

首先,如果你有一个〜/ .ssh / config,它就可以使用不同的公钥/私钥,这意味着你的ssh url应该使用所说的配置文件:

 url = github-work:/work_domain/work_submodule.git
 # or
 url = github-personal:/work_domain/work_submodule.git

配置文件的所有要点是使用不同的密钥,而不是必须提及用户,端口号,服务器名称等。
github-work”和“github-personal”是该配置文件中的输入键,它们不是服务器名称。

其次,在修改.gitmodules文件中的网址后,请不要忘记:

  • 如果子模块内容已从上一个地址加载,则完全删除它:
rm -Rf work_domain/work_submodule ; git checkout -- work_domain/work_submodule
  • 再次更新子模块:
git submodule sync
git submodule update work_submodule