git - Git 可以处理这种用例吗?

标签 git version-control migration git-submodules

我目前正在从 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 架构无法处理这种用例。

非常感谢,马克西姆。

最佳答案

您的分析是正确的;没有明显的方法可以同时解决所有这些用例。我会建议两种方法之一:

  1. 第一个单独检查模块的要求实际上可能并不需要。使用 git,您只需在执行初始克隆时支付一次 checkout 费用,但之后的增量更新非常快。
  2. 如果您正在处理 Maven 模块,也许每个模块都有自己的发布周期,那么这些模块真的需要源级别关系吗?如果不是,那么模块依赖关系可以单独在 Maven 中表示。

实际上,您可能应该从单个存储库开始,然后在您认为有必要时将其拆分出来。但你可能不会。 :)

关于git - Git 可以处理这种用例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507298/

相关文章:

用于开发和实时网站的 Git

version-control - 为什么单独的 Web 程序员应该从 Dropbox 切换到 "real"版本控制系统?

c# - 轮询 TFS 时 Jenkins 错误 - 无法执行获取操作,因为它是可写的

c# - 将 WPF 应用程序与 WinForm 应用程序集成

ruby-on-rails - 复制 ActiveRecord 记录并维护所有关系

git - 当 Git 子模块变为 'offline' 时会发生什么?

git - 使用未提交的自动生成的更改在 GIT 中切换分支

git - TFS+Git Require Linked Work Item 分支策略选项

web-services - SOA Web 服务 - 如何在 Git 上管理个人服务开发

database - 逐步迁移到新的数据库模式。 ¿建议?