我想创建一个包含多个子模块的公共仓库(裸仓库).我希望不同的人克隆这个裸仓库,在任何子模块中进行更改.更新公共回购.但是,我意识到这很痛苦.我希望我的回购看起来如下:
我有四个独立的回购. a.kernel b.rootfs c.apps d.modules.我将它们组合成一个名为“build”的超级名单.从这个superepo,我做了一个裸的repo build.git,它在人们之间共享.
现在,如果有人克隆了裸仓库并在“内核”子模块中进行了更改,那么他必须做一些事情来将更改推送到公共裸仓库.
>将其提交到“kernel”,在本地克隆中进行repo.
>将其提交到“build”,在本地克隆中使用superepo.
>将其提交给公共仓库中的“内核”,子模块.
>承诺“建立”,公共超级.
>拉取build.git中的更改,public bare repo.
做这一切都很痛苦.这有点打败了我将4个回购捆绑成1个超级堆的目的.有没有更好的方法去做. (我认为那些要做的人都是可信的,并且被允许弄乱任何东西.)
最佳答案 我有兴趣看到其他答案,但我担心你的问题有些过于复杂.
其他开发人员没有必要克隆构建以便更改其他独立的存储库.他们的工作流程应该类似于:
>克隆应用程序.
>更改应用程序.
>将提交推送到服务器.
然后,您(或者更好的是,定期或CI过程)只需要在构建存储库上执行git子模块更新然后构建.
请注意,开发人员不得提交任何内容(甚至触摸)构建存储库.
在此示例中,每个子模块应该是一个完全独立的存储库.如果它们不是(意味着,如果你必须修改构建以便在子模块中应用任何更改),那么它们不应该是子模块,而应该是构建的子目录.
如果开发人员需要在本地构建,他们应该执行以下一次:
>克隆构建
>编辑.gitmodules将每个子模块指向其本地仓库
>运行git子模块同步以将更改应用于.gitmodules
他们的本地构建副本现在指向子模块的本地副本,而不是“祝福”服务器副本.这意味着他们可以使用构建来测试构建整个项目,包括其本地更改,而不会影响服务器上的稳定代码.但是,用户不必(或推荐)将这些更改推送到服务器.使用GitHub,您可以通过不将其他开发人员的公钥添加到构建仓库来防止事故.