3

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

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

我怎样才能让另一个 SCM 也维护一个远程 ClearCase 维护的源代码树(在 ClearCase 旁边)?

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

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

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

4

6 回答 6

4

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

如果你仍然想混合,像 Mercurial 或 git 这样的分布式 SCM 有一些不错的东西,那就是能够在不强加于任何人的情况下使用它们。每个开发人员/团队都可以在 git 或 mercurial 中管理他的本地副本/本地分支,而没有人知道它。

git + subversion 或 mercurial + subversion 的优点是推回主存储库是工具的一部分,但没有它也可以生活。

在您的情况下,ClearCase 似乎是强加给您的,但您想使用替代方法。您可以决定在您的团队中使用 git,并定期将主分支推送到 ClearCase。

于 2009-01-16T15:34:10.990 回答
1

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

于 2009-01-16T15:16:33.553 回答
1

只要你可以让其他 SCM 忽略彼此(通过.cvsignore/.hgignore类文件)或让他们合作(比如git svn),我不明白你为什么不能这样做。我已经通过 svn/Hg/git 和 CVS 完成了。

于 2009-01-16T15:17:41.177 回答
1

以一种非常通用的方式,您始终可以将“外国”(在您的情况下为 ClearCase)回购的当前 HEAD 提交到 git 分支中,在此基础上重新设置您自己的分支并将结果提交回“外国”回购。起泡,冲洗,重复。

于 2009-01-16T15:30:49.780 回答
1

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

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

  • 通用SCM 互操作性解决方案,例如在 Git 中创建但由 Bazaar 支持的快速导入交换标准,我认为也由 Mercurial 或Tailor等工具(但 Tailor 有其局限性)
  • 使用 SCM API 或 SCM 可脚本性的特定工具,例如 Git 和 Subversion 之间的 git-svn(使用 Subversion Perl API)或 Git 和 Perforce 之间的 git-p4
  • 手动,即使用公共工作区(工作目录)从一个 SCM 获取更改(签出)并将更改(提交)添加到其他 SCM。这需要设置适当的忽略文件,因此一个 SCM 会忽略其他 SCM 特定的帮助文件和目录。
  • 在集中式 SCM(如 CVS)和其他 SCM(如 Git)之间交互的情况下,通过模拟集中式 SCM 的服务器,但在其他 SCM 中有存储库,如 git-svnserver
  • 数据后端,其中一个 SCM(如 Bazaar 或 Darcs)以其他 SCM 格式将更改(数据)存储在存储库中。我不知道这种解决方案的例子。
于 2009-01-16T15:44:25.993 回答
0

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

We do "publish" some data managed in our ClearCase repositories (VOBs) to other VCS (Subversion, Perforce, ...) or repositories (like Maven), for other teams which do not use ClearCase. However, the data exported are only deliveries.

A "delivery unit" is a small ('small' as in the fewest number of files as possible) set of packaged files: jar, war and ear are all an example of such packaged files, but we also include sources (compressed in a zip file), javadoc (compressed also), script to execute this delivery, and so on.

That way, only a few files are exported to clients, and only when a delivery is build and represent a significant stable version.

于 2009-01-16T15:56:48.447 回答