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

| 是否可以同时使用VCS(最好是SVN)和DVCS(最好是Mercurial或Git)创建简化的工作流程? 以下事实描述了所需的工作流程: 一台中央VCS服务器。 主要开发发生在中央服务器上。 核心开发团队之外的任何人(以他的名字命名为Joe)都可以拍摄具有完整历史记录的源代码快照。 Joe希望在自己的分支机构中开发一个功能。 Joe没有对VCS的写入权限,因此 他正在本地发展并致力于自己的DVCS存储库。 完成后,他联系主要的回购管理员,将其工作合并到Central中。 棘手的部分到了:他的作品能否合并到中央回购中以保存其历史记录?这样主要的开发团队就可以跟踪Joe的个人提交了吗? 我想学任何东西,可以为我指明正确的方向。如果不是不可能实现工作流,那么可以随意链接到教程。如果您已经对VCS-DVCS工作流程有任何经验,请与他人分享。如果无法实现它,那么信息对我来说也很有价值。 我知道该问题似乎与其他问题类似(例如vcs或dvcs工作流),但我找不到任何线索来保存历史记录。     
已邀请:
您可以使用Mercurial和Git来做到这一点-两个项目都有双向桥梁,可以与Subversion进行交互。 对于Mercurial,Joe将使用hgsubversion在其计算机上获取具有完整Subversion历史记录的Mercurial存储库。然后,他使用Mercurial正常发育。他将反复从Subversion服务器获取新修订,并在其基础上重新构建自己的变更集。 因此,让我们想象一下乔在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中成为四个修订。请参阅我的指南以获取更多信息和精美图片。     
您可以使用SubGit使Subversion存储库对Git用户可用。 SubGit基本上是几个挂钩脚本,必须将其安装到存储库中才能启用双向同步。安装后,SubGit会转换发送到存储库的每个SVN版本和Git提交。 SubGit不仅保留自然历史记录(修订和提交),而且还保留合并历史记录,与文件关联的元数据等。您可以在文档和git-svn比较中找到更多信息。 SubGit是一个商业项目,但是有一些免费选项。     
您可以使用git \的subversion支持与中央存储库进行交互-您可以使用\“ git svn dcommit \\”将更改推回到中央存储库 http://git-scm.com/docs/git-svn     

要回复问题请先登录注册