如何实现源控制管理互通?

时间:2009-01-16 15:07:36

标签: svn git version-control mercurial clearcase

虽然在我想要了解两个源控制管理(SCM)系统之间的互操作性如何能够完成之前已经提出相关问题。例如,我们可以考虑任何SCM(Mercurial,Git,SVN,CVS,Perforce,ClearCase ......)。

主要是我对ClearCase可以与SVN或Git / Mercurial一起使用感兴趣。

如何在另一个SCM上维护远程ClearCase维护的源代码树(在ClearCase旁边)?

虽然其他人可以使用ClearCase,但我们希望使用“其他”SCM并在该存储库中提交更改。 ClearCase存储库中的更改应该很快或定期进行(并且还应定期从ClearCase存储库进行更新,以确保我们拥有最新的源)

欢迎任何(其他/相关)示例/经验。谢谢!

PS:这是关于转储ClearCase(我很乐意这样做),它是关于在同一源树上同时使用两个源控件。

6 个答案:

答案 0 :(得分:4)

我真的建议不要混合它们。管理一个SCM是一项非常复杂的任务,您不希望普通用户必须处理其中的几个。

如果您仍然想要混合,像Mercurial或git这样的分布式SCM有一些不错的功能,即能够使用它们而不会将它们强加给任何人。每个开发人员/团队都可以在git或mercurial中管理他的本地副本/本地分支,而没有人知道它。

git + subversion或mercurial + subversion的优势在于,推回主存储库是该工具的一部分,但没有它就可以生存。

在你的情况下,看起来像ClearCase强迫你,但你想使用替代品。您可以决定在团队中使用git,并定期将主分支推送到ClearCase。

答案 1 :(得分:1)

我想到的一件事是git-svn:“它提供了Subversion和git存储库之间的双向变化流。”

答案 2 :(得分:1)

只要您可以让其他SCM忽略每个人(通过.cvsignore / .hgignore类型的文件)或让他们合作(如git svn),我不明白为什么你不应该那样做。我已经通过svn / Hg / git和CVS做了。

答案 3 :(得分:1)

以非常通用的方式,您可以随时将“外来”(在您的情况下为ClearCase)repo的当前HEAD提交到git分支,在您之上重新绑定您自己的分支并将结果提交回“foreign” “回购。泡沫,冲洗,重复。

答案 4 :(得分:1)

两个源代码管理(SCM)之间的互操作性问题是,如果一个SCM具有比其他SCM更丰富的模型(例如,如果您没有使用svnmerge,则1.5.0之前的Subversion不会存储合并的所有父项或SVK,而大多数现代SCM记住合并; Mercurial不支持章鱼合并,即与两个以上父母合并)。

至少我知道几种不同的解决方案:

  • 通用 SCM互操作性解决方案,例如在Git中创建但由Bazaar支持的快速导入交换标准,我认为也是Mercurial,或{{3}等工具(但是裁缝有其局限性)
  • 特定的工具,使用SCM API或SCM脚本编写,例如Git和Subversion之间的git-svn(使用Subversion Perl API)或Git和Perforce之间的git-p4
  • 手动,即使用公共工作区(工作目录)从一个SCM获取更改(签出)并将更改(comitting)添加到其他SCM。这需要设置适当的忽略文件,因此一个SCM会忽略其他SCM特定的帮助程序文件和目录。
  • 服务器仿真,在集中式SCM(如CVS)和其他SCM(如Git)之间通过模拟服务器进行集中式SCM交互,但在其他SCM中拥有存储库,如git-svnserver
  • 数据后端其中一个SCM(如Bazaar或Darcs)以其他SCM格式存储存储库中的更改(数据)。我不知道这种解决方案的例子。

答案 5 :(得分:0)

我同意BlueBird75:混合两个不同的引用并不是一个好主意,因为同样的原因让几个数据库具有相同类型的信息并不是一个好主意。在这些情况下,同步和复制并不容易管理。

对于不使用ClearCase的其他团队,我们会将我们的ClearCase存储库(VOB)中管理的一些数据“发布”到其他VCS(Subversion,Perforce,...)或存储库(如Maven)。但是,导出的数据仅为交付

“交付单位”是一个小的(尽可能少的文件中的“小”)打包文件集:jar,war和ear都是此类打包文件的一个示例,但我们还包括源(压缩在zip文件中),javadoc(也压缩),脚本执行此传递,等等。

这样,只有少数文件被导出到客户端,并且只有在构建交付并且代表重要稳定版本时才会导出。