SVN&;DVCS工作流-保存历史记录

SVN&;DVCS工作流-保存历史记录,svn,git,mercurial,workflow,dvcs,Svn,Git,Mercurial,Workflow,Dvcs,是否可以使用VCS(最好是SVN)和DVC(最好是Mercurial或Git)创建简化的工作流 以下事实描述了所需的工作流: 有一个中央VCS服务器 主要开发发生在中央服务器上 核心开发团队之外的任何人(让我们称他为Joe)都可以拍摄完整历史的源代码快照 乔想在他自己的分支中开发一个功能 Joe没有VCS的写入权限,所以 他正在本地开发并致力于自己的DVCS回购 完成后,他联系主要回购管理员,将其工作合并到中央 棘手的部分来了:他的作品能否合并到中央回购中,保存它的历史?以便主要开发团队能够

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

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

  • 有一个中央VCS服务器
  • 主要开发发生在中央服务器上
  • 核心开发团队之外的任何人(让我们称他为Joe)都可以拍摄完整历史的源代码快照
  • 乔想在他自己的分支中开发一个功能
  • Joe没有VCS的写入权限,所以
  • 他正在本地开发并致力于自己的DVCS回购
  • 完成后,他联系主要回购管理员,将其工作合并到中央
棘手的部分来了:他的作品能否合并到中央回购中,保存它的历史?以便主要开发团队能够跟踪Joe的个人提交

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


我知道这个问题可能与其他问题(例如)相似,但我找不到任何线索来说明历史是否被保存下来

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


您可以使用Mercurial和Git实现这一点——这两个项目都有与Subversion交互的双向桥梁

对于Mercurial,Joe将使用在他的机器上获得一个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中的四个修订。请参阅和漂亮的图片。

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

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

SubGit不仅保存自然历史(修订和提交),还保存合并历史、与文件相关的元数据等。更多信息请访问和


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

为什么不使用git回购进行中央回购?您必须使用SVN进行中央回购吗?Git或Mercurial将完全独立地支持此工作流,而不需要在中心使用SVN。是的,或者Mercurial,您实际上不需要使用SVN作为服务器(除非您出于非技术原因这样做),我很乐意这样做。我们有一些遗留项目,其中一个已经8年了。工作流可能是完成迁移的第一步。但没有人会冒突然回购转换的风险。有些开发人员只知道CVS。只需匿名使SVN服务器崩溃,并使其看起来SVN太旧,不再工作即可。;)这看起来很棒。你知道历史会发生什么吗?我相信它会被浓缩成不同的东西,个人的提交不会被推高,但整体的合并会被推高。SVK和SVN一起做这件事。我可以有100个本地提交,但当我合并到中心时,它只有一个提交,带有我的100个本地提交的文本(如果我选择-您可以随时覆盖提交消息)。SVK有一个特性,可以将每个本地提交作为一个单独的提交应用到中心,但这很危险。您几乎不希望每个人都提交,而是希望变更集作为一个整体。好吧,这对于我感兴趣的项目来说似乎是可行的。你建议不要每次提交?推动分支分离而不是合并怎么样?回购协议的维护者真的很想拥有它。我不会推动每一项承诺。但是,您可以让每个开发人员创建一个分支,然后将单个变更集提交到该分支,然后将该工作合并到主干。我觉得这太过分了。开发人员必须记住返回并应用每个单独的提交。开发人员的开销是不值得的——提交本身的价值是有争议的。