4

我有两个 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 目录中有 2 组 id_rsa 键:

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

~/.ssh/config 文件:

#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

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

4

2 回答 2

2

为防止意外将子模块的私有 URL 提交到存储库(取决于您的.ssh/config),您应该改为在.git/ssh


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

相反,正如评论中提到的@Chronical。要仅更改特定结帐的本地设置,您应该改为更改 URL.git/config

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

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

请注意,如果您git submodule sync编辑的 URL 会.git/config.gitmodules

于 2015-07-01T15:41:41.487 回答
0

首先,如果你有一个 ~/.ssh/config,它是为了能够使用不同的公钥/私钥,这意味着你的 ssh url 应该使用上述配置文件:

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

配置文件的重点是使用不同的密钥,不必提及用户、端口号、服务器名称等。 ' ' 和 ' ' 是该配置文件中的入口键,它们不是服务器名称。
github-workgithub-personal

二、修改.gitmodules文件中的url后,别忘了做:

  • 如果您的子模块内容已经从之前的地址加载,则完全删除它:
rm -Rf 工作域/工作子模块;git checkout -- work_domain/work_submodule
  • 再次更新该子模块:
git 子模块同步
git 子模块更新 work_submodule

另请参阅,使用 Git 2.25(2020 年第一季度)“ Git submodule url changed ”和新命令:

git submodule set-url [--] <path> <newurl>
于 2013-06-01T21:53:16.763 回答