我一直在研究Git子模块,以便在Git项目中创建一个“Git项目”,但我遇到了一个问题,告诉我子模块可能不是正确的解决方案。
让我解释一下我要做的事情:
目前我有一个包含多个分支(主要和开发)的项目和一个我想要分成它自己的Git项目的库(因此可以独立开发并使用它自己的提交历史记录)。具体来说,我也希望能够:
能够:(但不是必需的)能够:
据我所知,Git子模块支持#1和#4(即使#4需要一些额外的检查以确保你在正确的分支上)。 #2和#3没那么多。
我查看了Differences between git submodule and subtree和Vendor Branches in Git,但似乎都没有提供我要求的功能 - 是否可以使用Git实现?是否有可能没有大量额外的移动/重命名/检查目录?
答案 0 :(得分:0)
您的要求1-3可以通过子模块实现。要求4可以通过子树实现,但仅限于子模块。
首先,请注意,在不同项目/回购之间进行多次交互必然需要许多干预措施才能使项目保持同步。 (通过交互,我的意思是子模块的微小变化需要对子项目进行更改。)
有两件事需要注意:
具体来说,每次要更新子模块时,都必须
如果您很少更新子模块(不确定子树),则子模块很有意义。至少,这是我的印象。 我经常使用子模块来确保代码是可重现的(实际上,这毕竟是什么版本控制)。 即,为了对提交X的#34;等信息进行编码,我们需要提交子模块A&#34 ;.
在两个项目之间建立稳定的接口是限制交互的关键。
当您在超级项目中切换分支时,git子模块将知道它必须位于特定子模块的该分支的提交中。 然而
git submodule update
,所以,是的,子模块提供了要求1-3,尽管有一些手工工作。
git submodule update
。cd submodule; git commit; git push
有效。