我需要设置一个这样的存储库:
rep 是我想要设置的存储库
私有远程是我自己的远程存储库。
子代理是从公共远程获取的另一个存储库的包含(submodule
或subtree
)作为代表。在我读到有两种方法可以包含另一个存储库时,我只需编写“子存储库”而不是submodule
或subtree
。
子模块是子代表中的submodule
要求是我在 rep ,子代理和子模块中做出的所有提交都可以推送到我的私人远程,以便我可以从其他地方继续我的工作。但我仍然希望能够从公共远程接收更新。此时,我所做的任何提交都不应该被推送到公共远程。
关键应该是使用多个遥控器,但我不确定如何处理存储库(存储库内部)中的存储库。由于设置相对复杂(我认为),额外的工作流程示例将非常有用。
答案 0 :(得分:0)
使用术语,将您的私人遥控器作为源,将公共遥控器视为上游存储库。
首先,定义子模块层次结构:
将子模块作为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
现在,您可以定义公共存储库的远程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
使用以上设置:
从上游更新来源:
>git checkout master
确保您在所需的分支上。 “主人”只是一个例子
>git fetch upstream
从“上游”获取所有分支。
现在,您可以将一些上游分支合并到本地更改之上的本地副本中:
>git merge upstream/master
..或您可能希望重新设置基准,以便将本地更改删除并重新应用到更新的本地存储库上:
>git rebase upstream/master
解决所有冲突后,您可以将结果推送到原点:
>git push -f origin master
我使用类似的设置推送到我的原点,并从上游更新我的原点。