[英]How do I adapt my svn:externals strategy to git submodules?
我无法弄清楚如何将我的心态转变为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? :)
你是对的,子模块总是引用一个特定的修订版本,当你git add
子模块目录时就修复了这个版本(因此你可以准确地控制在开发人员框中检出的内容)。 但我认为这是一个功能,因为您可以在需要时始终请求子模块的HEAD。 另一方面,这意味着当您检查项目的旧状态时,无论子模块中发生什么变化,您总是会获得相同的状态。 您可以将它们视为固定到特定版本的svn外部。
至于子模块中的更改,它们只是普通的git repos,您可以在其中使用正常的工作流程,就好像它们克隆到自己的工作副本中一样。 常规克隆有一个区别,即子模块的检出很可能是一个分离的头,所以当你在那里进行更改时,你必须自己创建一个分支。
对于许多命令部分,是的,需要做更多的工作,这是为这个功能付出的代价。 如果存在许多子模块,您可以添加执行子模块检出的脚本。
编辑
我找到了关于子模块的详细说明: http : //longair.net/blog/2010/06/02/git-submodules-explained/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.