2016-01-21 60 views
1

我有一个工具集合,我通过git在远程回购与工作树上拉动我的计算机之间进行同步。Git子模块peer2peer工作流程

每当某些工具有git源时,我会通过'git submodule add'添加它们。

有时候我会做一些小的修改,编译工具,并添加想要在git repo中提交 - 我的目标是快速使用它们并重新编译。 什么是适当的工作流程?如果我从一开始:

modulepath/submodulepath/bin$ git add submodulefile 
modulepath/submodulepath/bin$ git commit -m "subfix" 
modulepath/submodulepath/bin$ git pull origin master 
modulepath/submodulepath/bin$ cd ../../ 
modulepath/$ git add submodulepath;git commit -m "subfix in sub" 

然后将提交的子版本传播后,我拉主repo?我在这里读到git submodule update,我需要提交第一个子模块。但事实上,我的提交不会被推到子模块的起源,但我想同步共享主模块的主机之间的更改,如何继续?主模块是否可以覆盖子模块中的更改?或者我可以启动一个没有上游url的子模块分支 - 它只会被父主模块提取/合并。

回答

0

但与事实我承诺不会被推到子模块出身,但我要同步主机之间的变化主要共享模块

,这里的问题:你需要先推子模块如果你想要主要的回购能够得到回报。

主回购仅记录表示子模块的新SHA1的gitlinkspecial entry in the index)。
但是,如果该SHA1代表未被子模块推送的提交,则git submodule update将无法​​成功。

+0

那么为什么git被称为分散如果为了共享内容p2p我需要在每个主机上设置外部URL,其中一些是NAT后面的连接可能只有一种方式? – nusch

+0

@nusch因为git *是*分散的。它从*分散*服务器获取其内容。对于子模块,父回购仅记录其子模块的URL和SHA1。如果该子模块在本地更改,则需要将该更改推送到父回购所依赖的网址,以便取回新的SHA1。 – VonC