我无法弄清楚如何将我的心态转变为git并遇到以下问题。我遇到的情况是我们有一个共享引擎和多个使用该引擎的项目。内部开发团队和第二方团队可能正在处理使用共享引擎的项目,并希望在开发期间尽可能多地使用共享引擎的HEAD,直到发布前几周,共享引擎将被标记并且分支,然后项目将使用该分支。项目团队通常一次只能处理一个项目,但可以在调试期间对共享引擎进行更改或添加功能。当他们提交这些更改时,我们的构建系统会运行以查找他们可能通过提交引入的任何问题。
我(我想)我希望将这个模型与新项目/新公司一起使用。在svn中,结构是这样的: shared_engine
project_in_dev-+
+- svn:external shared_engine:head
project_about_to_ship-+
+-svn:external shared_engine_rev1_branch
这非常有效:
好的,现在我已经转移到git,并且子模块SEEM成为处理外部代码的新方法,但似乎我失去了一些功能。
所以我的问题如下:
非常感谢您的帮助和耐心。如果不是很明显,我对git很新,我喜欢它并希望拥抱它,但我仍然有一些概念上的误解,因为我可能因多年使用中央回购而受到脑损伤。我想学习!此外,我整天都在rtfm'ing,并查看各种博客文章,stackoverflow问题等,我仍然没有得到它,我显然需要逐步说明我的情况。我没有同事可以询问这一点,西雅图地区的任何用户群可能都有一些git guru? :)
答案 0 :(得分:4)
你是对的,子模块总是引用一个特定的修订版本,当你git add
子模块目录时修复了这个版本(因此你可以完全控制 在开发人员框中检出的内容)。但我认为这是一个功能,因为您可以在需要时始终请求子模块的HEAD。另一方面,这意味着当您检查项目的旧状态时,无论子模块中发生什么变化,您总是会获得相同的状态。您可以将它们视为固定到特定版本的svn外部。
对于子模块的更改,它们只是普通的git repos,您可以在其中使用正常的工作流程,就好像它们克隆到自己的工作副本中一样。常规克隆有一个区别,即子模块的签出很可能是一个分离的头,因此当你在那里进行更改时,你必须自己创建一个分支。
对于许多命令部分,是的,需要做更多工作,这是为此功能付出的代价。如果有很多子脚本,您可以添加执行子模块检出的脚本。
修改强>
我找到了关于子模块的详细说明:http://longair.net/blog/2010/06/02/git-submodules-explained/。