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

Rek*_*kin 2 svn git workflow mercurial dvcs

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

以下事实描述了所需的工

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

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

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

我知道这个问题可能与其他问题类似(例如vcs或dvcs工作流程),但无论历史是否被保留,我都找不到任何线索.

Mar*_*ler 7

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

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

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

... R1 --- R2 --- J1 --- J2 --- J3
Run Code Online (Sandbox Code Playgroud)

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

... R1 --- R2 --- J1 --- J2 --- J3
             \
              R3 --- R4
Run Code Online (Sandbox Code Playgroud)

新分支代表新的Subversion修订版.由于Subversion是线性的,他必须在新分支之上重新设计他的工作:

... R1 --- R2 --- R3 --- R4 --- J1 --- J2 --- J3
Run Code Online (Sandbox Code Playgroud)

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

... R1 --- R2 --- R3 --- R4 --- R5 --- J1 --- J2 --- J3 --- J4
Run Code Online (Sandbox Code Playgroud)

现在你可以将J1-4变换集推送到Subversion:

... R1 --- R2 --- R3 --- R4 --- R5 --- R6 --- R7 --- R8 --- R9
Run Code Online (Sandbox Code Playgroud)

历史被保留:四个变更集在Subversion中成为四个修订版.请参阅我的指南以获取更多信息和漂亮的图片.