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

我有两个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 /配置文件:

#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

在工作项目repo中,.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

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

最佳答案 为了防止意外将子模块的私有URL提交到存储库(取决于您的.ssh / config),您应该改为编辑.git / ssh中的URL.

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

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

url = github-work:/work_domain/work_submodule.git

通过更改它而不是.gitmodules,您可以摆脱额外的步骤来清理意外使用错误URL的内容

请注意,如果您执行git子模块同步,则.git / config中编辑的URL将被.gitmodules中的URL覆盖

点赞