如何使用git子存储库推送到私有遥控器,但也从其原始来源拉动

时间:2014-02-10 11:56:09

标签: git git-submodules git-remote git-subtree

我需要设置一个这样的存储库:

  • rep (从/向私人远程推送和推送)
    • 正常的东西
    • 子代理(从私有远程& 公共远程拉出并推送到私人远程
      • 子代表
      • 中的内容
      • 子模块(从私人远程& 公共远程拉出并推送到私人远程
        • 子模块
        • 中的内容

rep 是我想要设置的存储库

私有远程是我自己的远程存储库。

子代理是从公共远程获取的另一个存储库的包含(submodulesubtree)作为代表。在我读到有两种方法可以包含另一个存储库时,我只需编写“子存储库”而不是submodulesubtree

子模块子代表中的submodule

要求是我在 rep 子代理子模块中做出的所有提交都可以推送到我的私人远程,以便我可以从其他地方继续我的工作。但我仍然希望能够从公共远程接收更新。此时,我所做的任何提交都不应该被推送到公共远程

关键应该是使用多个遥控器,但我不确定如何处理存储库(存储库内部)中的存储库。由于设置相对复杂(我认为),额外的工作流程示例将非常有用。

1 个答案:

答案 0 :(得分:0)

使用术语,将您的私人遥控器作为源,将公共遥控器视为上游存储库。

  1. 首先,定义子模块层次结构:

    • 子模块作为git子模块添加到 sub-rep 。您可以通过将.gitmodules文件添加到 sub-rep 中来实现此目的,其内容类似于以下内容:

      [submodule "sub-rep/sub-module"] path = sub-rep/sub-module url = https://github.com/privateremote/sub-module.git

    • sub-rep 作为git子模块添加到 rep


    要让git递归更新整个树,可以使用以下命令:
    git submodule update --init --recursive

  2. 现在,您可以定义公共存储库的远程URL的别名:

    • 转到本地子模块存储库的根,然后:
      git remote add upstream https://github.com/somepublicremote/sub-module.git

    • sub-rep 做相应的事情:
      git remote add upstream https://github.com/someotherpublicremote/sub-rep.git

      您可以根据需要使用其他别名,例如“ myupstream”

    • 使用此命令来验证您的设置:
      git remote -v

  3. 使用以上设置:

    • 从上游更新来源:
      >git checkout master 确保您在所需的分支上。 “主人”只是一个例子
      >git fetch upstream 从“上游”获取所有分支。

      现在,您可以将一些上游分支合并到本地更改之上的本地副本中:
      >git merge upstream/master

      ..或您可能希望重新设置基准,以便将本地更改删除并重新应用到更新的本地存储库上:
      >git rebase upstream/master

      解决所有冲突后,您可以将结果推送到原点:
      >git push -f origin master

我使用类似的设置推送到我的原点,并从上游更新我的原点。