2011-03-25 141 views
21

这可能吗?想象一下,我有项目父母&孩子。两者都是git respositories。子是Parent的子模块。编辑git子模块

我可以编辑内部的子版本&提交&将它们像普通存储库一样推送?

或者我需要一个单独的克隆的孩子的地方,我作出改变?

谢谢。

+0

另请参阅http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194 – VonC 2011-03-25 05:10:40

回答

26

你不需要一个单独的克隆。子模块文件夹是它自己的世界。只要编辑,提交,分支,并推动你的心脏的喜悦。

Git非常棒。 :-)

顺便说一下,父存储库甚至会检测子模块文件夹内发生的更改,并提供您提交子模块的当前状态作为父回购的克隆的新官方参考点。

重要提示:

确保您在开始之前,黑客做的子模块文件夹内git checkout master(或其他一些分支)。

然后还要确保何时提交子模块的更新状态,您是否要push那些提交到公共回购站,或者至少您没有改变或以其他方式更改子模块内的历史记录之后 - 因为这会破坏父母对子模块历史记录的引用。

小心踩踏。 (帽尖@pjmorse的提醒。)

底线:

是。在子模块文件夹内开发可能并且通常很方便但不是没有风险。选择你的发展模式明智地

+1

+1首先进行结账。此外,在切换分支机构或在Parent中执行其他工作之前,您要确保您有一个干净的Child repo(提交任何更改)。 – 2011-03-25 01:29:41

+0

在父代执行简单的日常(编辑,提交,拉取,推送)工作时,在父代回购中工作时,我还没遇到子模块中未完成更改的问题。不过,切换分支和子模块更新操作可能会有风险。好点子! – 2011-03-25 01:39:21

+0

在克隆中开发并不是一个坏主意,只是为了减少意外使用分离的HEAD犯下的可能性。你当然也可以使用钩子来检查你自己。 – Cascabel 2011-03-25 02:59:33

4

按照documentation

如果你想使一个子模块内的变化,应先检查出一个分支,进行更改,子模块内发布的变化,然后更新超级项目以引用新的提交。

就我所知,如果你在添加子模块的分支上工作,你可以编辑Child并推回到它的存储库。但是,如果您不是将Child添加到Parent的开发人员,则您正在使用分离的头部,并需要检出单独版本的Child以进行更改,或者进行更改并导出修补程序(使用git format-patch)为其他人提交(通过git am)。

+0

“主人”很可能是您检查的分支。但是你说得很好! – 2011-03-25 01:14:37