我目前正在从 SVN 迁移到 Git。代码库是一个 10-15 模块的大型 Maven 项目。我们过去每个模块都有一个 repo。
我想知道我的 Git 存储库应该有什么架构来处理以下用例:
- 用户可以 checkout 1..N 个模块。
- John 提交并推送模块 M。Emma 从 super 文件夹中 pull 更改。
- John 从 super 文件夹提交并推送模块 M 的更改。 Emma 从模块文件夹中提取更改。
- John 将文件 A 从 M1 移动(使用 git mv)到 M2,提交并推送。 Emma 在提交前编辑文件 A 更新。文件已随着 Emma 的更改而移动。
我想到了“单一存储库”架构,但未处理 UC#1。 '子模块','subtree ' 和以前的 'one-module-one-repo' 无法处理 UC#4。
此外,如果大多数用例都由“子模块”架构处理,我想引入尽可能少的复杂性。子模块引入了分离头等概念,并可能在更频繁的错误后导致痛苦的修复。
我进行了广泛的搜索,我不确定在不引入太多复杂性的情况下是否可行,但我希望你们中的一些人一定已经找到了解决方法。
备注:我们当前的 SVN 架构无法处理这种用例。
非常感谢,马克西姆。
最佳答案
您的分析是正确的;没有明显的方法可以同时解决所有这些用例。我会建议两种方法之一:
- 第一个单独检查模块的要求实际上可能并不需要。使用 git,您只需在执行初始克隆时支付一次 checkout 费用,但之后的增量更新非常快。
- 如果您正在处理 Maven 模块,也许每个模块都有自己的发布周期,那么这些模块真的需要源级别关系吗?如果不是,那么模块依赖关系可以单独在 Maven 中表示。
实际上,您可能应该从单个存储库开始,然后在您认为有必要时将其拆分出来。但你可能不会。 :)
关于git - Git 可以处理这种用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507298/