我知道有很多关于同样的问题,但我仍然需要更多的信息.我正在研究将我们的SVN repo迁移到git并试图了解什么方法(整体主干,子模块,子树等)对我们的回购最好的可能性.
以下是有关我们的项目和SVN存储库的一些信息:
基本上我们的结构看起来像:
repo
|-application(war)
|-module1 (for example, ui stuff)
|--module1Submodule1
|--module1Submodule2
|-module2 (for example, database access stuff)
|-...
Run Code Online (Sandbox Code Playgroud)
每个模块都有自己的标签和分支.
我的本地机器上的svn repo的大小包括所有分支,标签等:
典型用例:
未来的用例:
问题是:
先感谢您!
历史
使用git svn可以为所有提到的方法保留历史记录:http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git 甚至可以切换回以前的提交.
但是,有人建议不要保存历史记录,只需将svn存储库冻结约6个月,而所有历史记录都会在git repo中发生变化.我不同意这些建议,因为历史对我们的项目至关重要.我打赌没有人接受这样的解决方案.
巨树干进场
关注:在整个团队中拥有200多个Dev和QA,我怀疑最终推动变革会非常不安.
测验
使用这种方法迁移的步骤,成本和总成本是多少?
它如何支持代码选通?从VCS /工具的角度来看,需要进行哪些更改?假设完整的CI运行需要15分钟.
什么是高效的开发人员工作流程
子模块
大多数警告在这里解释http://git-scm.com/book/en/Git-Tools-Submodules和http://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use -git-子模块/
主要问题是你必须提交两次
实际上,当存在可以与不同项目重用的库时创建的子模块,但是您希望依赖于库的特定标记以及将来更新引用的能力.但是,我们不打算标记每个提交(仅在每次提交后发布),并且在战争中更改依赖关系版本(对于已发布的提交)将比维护子模块方法更容易.Java依赖关系管理使事情变得更简单.
不建议指向子模块头并导致子模块出现问题,因此这种方法对于转到快照来说是死路一条.而且我们不再需要它,因为java依赖管理将为我们做所有事情.
测验 使用这种方法,迁移的步骤,成本和总成本是多少?
它如何支持代码选通?从VCS /工具的角度来看,需要进行哪些更改?假设完整的CI运行需要15分钟.
什么是高效的开发人员工作流程 (Gerrit过程被忽略)
要么
如您所见,开发人员工作流程很麻烦(需要始终更新两个地方),并且不适合我们的需求.
子树
主要问题是您必须提交两次To tree merged子目录将更改推送到原始repo
子树是子模块的更好替代品,它更强大,并且将子模块的源代码合并到聚合repo而不是仅仅引用它.它使得维护这样的聚合repo变得更简单,但是子树的问题与子模块的问题相同,使得双重提交完全没用.您不必被迫对原始模块仓库进行更改,并且可以使用聚合仓库进行更改,这可能导致仓库之间的不一致...
这里的差异很好解释:http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/
测验 使用这种方法,迁移的步骤,成本和总成本是多少?
它如何支持代码选通?从VCS /工具的角度来看,需要进行哪些更改?假设完整的CI运行需要15分钟.
什么是高效的开发人员工作流程 (Gerrit过程被忽略)
与子模块一样,有两个地方(repoes)存在代码/更改是没有意义的.不适合我们的情况.
单独的回购
单独的回购看起来像是一个最好的解决方案,并遵循原始的git内涵.复制的粒度可以变化.最细粒度的情况是每个maven发布组都有repo,但是它可能会导致太多的回购.此外,我们需要考虑一个特定的svn提交对多个模块或发布组的影响.如果我们看到,该提交通常会影响3-4个发布组,那么这些组应该形成一个repo.
另外我认为至少将api模块与实现模块分开是值得的.
测验 使用这种方法,迁移的步骤,成本和总成本是多少?
它如何支持代码选通?从VCS /工具的角度来看,需要进行哪些更改?假设完整的CI运行需要15分钟.
什么是高效的开发人员工作流程
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |