我的项目使用了超过100个的git子模块,该子模块替代可以优雅地处理大量的存储库

问题描述 投票:5回答:2

我一直在研究的Git树和其他替代品的git子模块。我的项目有超过100个子模块,这是非常笨拙来管理他们所有。

任何人都可以推荐有大量需要保持同步资料库的作品真的很好的工作流。

git dependencies repository workflow git-submodules
2个回答
8
投票

如果你的项目有组件和依赖的超过100个的git子模块,其管理将是笨重的,无论哪种方法你用:-)我建议想方设法脚本和许多地方尽可能自动化。相信我,用打和链接Git命令新鲜感很快磨损对于大多数人来说,尤其是在最后期限正在逼近。已经有对不同方法的比较很好的答案here管理git的子项目。

关于工作流程,我会第一个单独的存储库是从那些不即第三方库的控制之下。

对于第三方仓库不经常改变(无论是通过合并或上游PRS),你仍然可以使用子模块。通常情况下,你将指向这些子模块的一些稳定的标签头。同步-ING他们来说,这只是一个运行(或脚本)git submodule update --recursive --remote的问题。如果可以在包管理工具,如bundler (for ruby projects)指定这些第三方的依赖关系,这将有助于简化您的子项目管理。

对于库,你自己并经常更改,无论是gitslavegit-subtree两种选择,这取决于你的团队的喜好。

gitslave复用的Git操作到多个分支。 IOW,当你分支,合并,提交,推,拉等,每个命令将在父项目并依次所有从机运行。这种强制要求球队在自上而下的方式工作,从超项目开始下降到奴隶。

gitsubtree使用Git的subtree merge功能实现为子模块类似的效果,通过实际存储的文件在主存储库,并在变化直接合并到该存储库。最终的结果是与包括所有的子项目历史的选择规范库。在某种程度上,这可以让团队成员更专注于他们负责的子树,但将需要额外的工作来重新合并到父树。

作为开发人员,我的偏好是在较低的子项目级别工作(做我"red, green, refactor" cycle),并且仅在必要时触到父项目。但不管您是否选择自上而下或自下而上的工作流程,试图找出你的分支与合并策略的重复容易出错的步骤和脚本他们尽可能多地。


1
投票

我有同样的问题,而不是100子模块,但约15-20,我建了一个CLI,以帮助犯,推,拉,重订,结帐,等我也用硬我的应用程序内联这样的CLI还把手这一点,但它不是必需的硬链接。 CLI是写在走,并具有各种操作系统平台发布

对于我的应用程序,我的工作流程一般都有一个“.boiler”文件夹,我的所有子模块去,那么.boiler内我硬链接文件复制到我的应用程序的‘SRC’,然后当我做编辑链接文件,它更新源文件,它是在gitsubmodule

这里的链接与安装说明的CLI,当然你可以下载的版本,它在全局路径添加到任何路径多数民众赞成

https://github.com/ml27299/lit-cli

© www.soinside.com 2019 - 2024. All rights reserved.