是否可以使用VCS(最好是SVN)和DVCS(最好是Mercurial或Git)创建简化的工作流程?
以下事实描述了所需的工作流程:
这里有一个棘手的部分:他的作品能否合并到中央回购保留它的历史?那么主要开发团队可以跟踪Joe的个人提交吗?
我想学习任何东西,这可以指引我朝着正确的方向前进。如果工作流不无法实现,则可以随意抛出指向教程的链接。如果您对VCS-DVCS工作流程有任何经验,请分享。如果不可能实现它,那么为什么对我来说也很有价值。
我知道这个问题可能与其他问题类似(例如vcs or dvcs workflow),但无论是否保留历史记录,我都找不到任何线索。
答案 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不仅保留自然历史(修订和提交),还保留合并历史,与文件关联的元数据等。您可以在documentation和git-svn comparison找到更多信息。
SubGit是一个商业项目,但有一些免费选项。
答案 2 :(得分:1)
您可以使用git的subversion支持与中央存储库进行交互 - 您可以使用“git svn dcommit”将更改推回到中心