git:在子模块中管理多个 Remote

标签 git git-submodules git-remote

我的团队使用公开可用的 github 托管项目作为我们主项目中的子模块。我们希望针对该项目管理我们自己的补丁,而不向上游推送,但是我们无法共享这些补丁,除非我们有一个镜像来推送我们的私有(private)分支。

假设我们有镜像,我们的子模块需要两个远程:一个是我们从中获取上游更改的地方,另一个是我们推送与我们的补丁分支 merge 的地方。我们如何使用子模块(或 super 项目)存储关于 Remote 的信息,以便团队的每个成员都可以轻松地执行上游更新,而不必 git add remote upstream ...github.. .project.git.

我们打算通过编写一个 shell 脚本来自动执行该过程和一个用于存储上游远程的文件来解决这个问题,但是是否有 git 方式可以做到这一点?

可能相关,但我没有看到合适的解决方案:git add remote in submodule

最佳答案

当前的ansatz是这样的:

  • 对于每个需要以上述方式管理的子模块,有一个submodule/.gitupstream文件存储url
  • 使用一个简单的 shell 脚本:
    • 从这个文件更新子模块的上游远程
    • 上游获取git
    • git checkout 已知的子模块补丁分支(可能来自 .gitmodules submodule..branch)
    • git merge upstream/master(或任何 refspec)

然后手动:

  • git push origin(包含我们补丁分支的镜像)
  • 提交更改的子模块并推送到 super 项目

不过,我希望看到一个更好的,可能是 git 内置的解决方案。

关于git:在子模块中管理多个 Remote ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37461647/

相关文章:

Git hook 拒绝包含子模块更新的推送?

Git 子模块 : Move submodule outside repository

git - 将 git repo 转换为子模块并将 .git 目录移动到 superepo

git - 更改 Git 远程 HEAD 以指向 master 以外的内容

git - 如何 Git merge 来自不同 PC 的同一应用程序的两个单独副本(但具有一些不同的功能)

git - 如何更新镜像的 git 存储库

git - 自签名 SSL 证书与 Windows Server 2012、Bonobo Git 服务器一起使用

Git - 忽略特定文件夹中的扩展名

相同工作目录的 git remotes 是不同的(或者至少看起来是这样)

git - 添加了不正确的 Git 远程;无法删除它或用另一个 Remote 覆盖它