使用提交提交的Git子模块时有哪些选项?

Jea*_*let 6 git repository git-submodules git-slave

在工作中,我们正在处理十几个Java OSGi包,每个包都有自己的git存储库.从长远来看,所有捆绑包都是相互独立的,这证明了各个存储库的合理性 - 尽管现在我们仍然经常同时修改其中的几个.

当我们进行产品发布(由所有包组成)时,会在每个包中创建一个新分支,这有点痛苦.因此我们考虑使用git-submodule来缓解疼痛(类似的事情git submodule foreach <cmd>).

因此,我们所需的设置将是一个主项目Product,以及每个包的子模块:

Project/
  BundleA/
  BundleB/
  BundleC/
Run Code Online (Sandbox Code Playgroud)

现在,我花了几个小时阅读所有关于子模块的内容,我明白如果我修改内容BundleA,我必须提交BundleA,推送,然后提交子模块更改Project并再次推送.

这听起来好像不是git-submodule设计为首先使用的方式.这样使用它是违反最佳做法的吗?或者听起来像一个替代选择的情况?

  • 裸机git-submodule用法
  • 使用现有的"git包装器":
  • 编写我自己的简单bash脚本来批量处理OSGi包

任何其他建议欢迎.

Set*_*son 6

你不需要跟踪子项目在超级项目中做了什么(紧密绑定)然后我建议你远离git-submodules.

gitslave(http://gitslave.sf.net)本质上是每个子项目的一个大型foreach,在超级项目中列出子项目的配置文件.有很多花铃和口哨使它更方便,但如果你的目标是在超级项目(可选)和所有子项目上运行相同的命令,gitslave就像你要找到的那样方便.

例如,在gitslave中创建一个新分支是:

gout checkout -b newbr

然后您的超级项目和所有子项目将创建新分支并更改为它.通常,如果要在超级项目的所有成员上运行gits命令,只需将"git"命令更改为"gits".