【问题标题】:Updating a submodule when multiple git accounts are configured配置多个 git 帐户时更新子模块
【发布时间】:2013-05-28 08:51:25
【问题描述】:

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

#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

但是还是不能在本地更新子模块。

【问题讨论】:

  • github ssh 访问总是以“git”作为用户名——因此你的 ssh 配置文件中的“work-username”是错误的
  • 您可以在 .git/config 中更改子模块的实际远程。这不会被推送或其他任何东西,只会影响您的本地仓库。
  • 用建议和最新错误更新问题

标签: git github


【解决方案1】:

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


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

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

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

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

请注意,如果您使用git submodule sync,您在.git/config 中编辑的网址将被.gitmodules 中的网址覆盖

【讨论】:

    【解决方案2】:

    首先,如果你有一个 ~/.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文件中的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>
    

    【讨论】:

    • 谢谢!那是我以前的更新尝试留下的痕迹。清理所有文件就可以了。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2012-04-27
    • 2012-09-14
    • 1970-01-01
    • 2018-10-15
    • 2012-07-09
    相关资源
    最近更新 更多