Chr*_*ell 10 svn git 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
Run Code Online (Sandbox Code Playgroud)
这非常有效:
好的,现在我已经转移到git,并且子模块SEEM是处理外部代码的新方法,但似乎我失去了一些功能.
所以我的问题如下:
非常感谢您的帮助和耐心.如果不是很明显,我对git很新,我喜欢它并希望拥抱它,但我仍然有一些概念上的误解,因为我可能因多年使用中央回购而受到脑损伤.我想学习!此外,我整天都在rtfm'ing,并查看各种博客文章,stackoverflow问题等,我仍然没有得到它,我显然需要逐步说明我的情况.我没有同事可以询问这一点,西雅图地区的任何用户群可能都有一些git guru?:)
你是对的,子模块总是引用特定的修订版,当您进入git add子模块目录时,该修订版是固定的(因此您可以准确控制在开发人员框中签出的内容)。但我认为这是一个功能,因为您始终可以在需要时请求子模块的 HEAD。另一方面,这意味着当您签出项目的旧状态时,无论子模块中发生了什么变化,您总是会得到相同的状态。您可以将它们视为固定到特定修订版的 svn 外部。
至于子模块中的更改,它们只是普通的 git 存储库,您可以在其中使用正常的工作流程,就好像它们克隆到自己的工作副本中一样。与常规克隆有一个区别,即子模块的签出很可能是一个分离的头,因此当您在其中进行更改时必须自己创建一个分支。
对于许多命令部分,是的,需要做更多的工作,这就是为此功能付出的代价。如果有很多子模块,您可以添加一个执行子模块签出的脚本。
编辑
我找到了有关子模块的详细解释:http://longair.net/blog/2010/06/02/git-submodules-explained/。