SVN& DVCS工作流程 - 保留历史记录

时间:2011-04-13 19:44:00

标签: svn git mercurial workflow dvcs

是否可以使用VCS(最好是SVN)和DVCS(最好是Mercurial或Git)创建简化的工作流程?

以下事实描述了所需的工作流程:

  • 有一个中央VCS服务器。
  • 主要开发发生在中央服务器上。
  • 核心开发团队以外的任何人(让他们命名为Joe)都可以拍摄完整历史记录的源代码快照。
  • Joe想在自己的分支中开发一个功能。
  • Joe没有VCS的写权限,所以
  • 他正在本地开发并致力于他自己的DVCS回购。
  • 当他完成后,他会联系主要的回购管理员,将他的工作合并到中央。

这里有一个棘手的部分:他的作品能否合并到中央回购保留它的历史?那么主要开发团队可以跟踪Joe的个人提交吗?

我想学习任何东西,这可以指引我朝着正确的方向前进。如果工作流无法实现,则可以随意抛出指向教程的链接。如果您对VCS-DVCS工作流程有任何经验,请分享。如果不可能实现它,那么为什么对我来说也很有价值。

我知道这个问题可能与其他问题类似(例如vcs or dvcs workflow),但无论是否保留历史记录,我都找不到任何线索。

3 个答案:

答案 0 :(得分:7)

您可以使用Mercurial和Git执行此操作 - 两个项目都具有与Subversion交互的双向桥接。

对于Mercurial,Joe将使用hgsubversion在他的机器上获得具有完整Subversion历史记录的Mercurial存储库。然后他使用Mercurial正常发展。他将反复从Subversion服务器获取新的修订版本,并在他们之上修改自己的变更集。

因此,让我们假设Joe在SVN的修订版2之上做了三个变更集:

... R1 --- R2 --- J1 --- J2 --- J3
然后他从Subversion中引入了新的变更集(只有hg pull - hgsubversion将理解它应该逐步将新的Subversion版本转换为Mercurial变更集)。结果是:

... R1 --- R2 --- J1 --- J2 --- J3
             \
              R3 --- R4

其中新分支代表新的Subversion修订版。由于Subversion是线性的,他必须在新分支的基础上改变他的工作:

... R1 --- R2 --- R3 --- R4 --- J1 --- J2 --- J3

他继续像这样工作,总是变基,而不是合并,当需要发送更改时,他会要求您或其他人在Subversion存储库上提交权限以获取他的Mercurial存储库。你得到了

... R1 --- R2 --- R3 --- R4 --- R5 --- J1 --- J2 --- J3 --- J4

现在您可以将J1-4变更集推送到Subversion:

... R1 --- R2 --- R3 --- R4 --- R5 --- R6 --- R7 --- R8 --- R9

保留历史记录:四个变更集在Subversion中成为四个修订版。请参阅my guide for more information和精美图片。

答案 1 :(得分:2)

您可以使用SubGit为Git用户提供Subversion存储库。

SubGit基本上是一些必须安装到存储库中以实现双向同步的钩子脚本。安装完成后,每个SVN版本和发送到存储库的Git提交都会被SubGit转换。

SubGit不仅保留自然历史(修订和提交),还保留合并历史,与文件关联的元数据等。您可以在documentationgit-svn comparison找到更多信息。

SubGit是一个商业项目,但有一些免费选项。

答案 2 :(得分:1)

您可以使用git的subversion支持与中央存储库进行交互 - 您可以使用“git svn dcommit”将更改推回到中心

http://git-scm.com/docs/git-svn