使用子模块创建公共存储库

时间:2012-03-21 19:26:33

标签: git github

我想创建一个包含多个子模块的公共仓库(裸仓库)。我希望不同的人克隆这个裸仓库,在任何子模块中进行更改。更新公共回购。但是,我意识到这很痛苦。我希望我的回购看起来如下:

我有四个独立的回购。 a.kernel b.rootfs c.apps d.modules。我将它们组合成一个名为“#34; build"”的superepo。从这个superepo,我做了一个裸的repo build.git,它在人们之间共享。

现在,如果有人克隆了裸仓库并在内核"子模块中进行了更改,那么他必须执行以下操作将更改推送到公共裸仓库。

  1. 将其提交到" kernel",repo in local clone。
  2. 将其提交到" build",superepo in local clone。
  3. 将其提交给"内核",公共回购中的子模块。
  4. 将其提交给" build",public superepo。
  5. 拉出build.git中的更改,public bare repo。
  6. 这一切都很痛苦。这有点打败了我将4个回购捆绑成1个超级堆的目的。有没有更好的方法去做。 (我认为那些要做的人会被信任,并且被允许搞乱任何事情。)

1 个答案:

答案 0 :(得分:2)

我有兴趣看到其他答案,但我担心你的问题会让你过分复杂。

其他开发人员无需克隆build以更改其他独立的回购。他们的工作流程应该与此类似:

  • 克隆apps
  • apps进行更改。
  • 将提交推送到服务器。

然后,您(或更好的是,定期或CI流程)只需在git submodule update repo上执行build然后构建。

请注意,开发人员不得提交任何内容(甚至触摸)build repo。

在此示例中,每个子模块应该是一个完全独立的存储库。如果它们不是(意味着,如果您必须修改build以便在子模块中应用任何更改),那么它们不应该是子模块,而应该是build的子目录。

如果开发人员需要在本地构建,他们应该执行以下操作:

  • 克隆build
  • 编辑.gitmodules以将每个子模块指向其本地存储库
  • 运行git submodule sync以将更改应用于.gitmodules

他们的build本地副本现在指向子模块的本地副本,而不是“祝福”服务器副本。这意味着他们可以使用build来测试构建整个项目,包括他们的本地更改,而不会影响服务器上的稳定代码。 但是,用户无需(或推荐)将build中的这些更改推送到服务器。使用GitHub,您可以通过不添加其他开发人员的公钥来防止意外到build回购。