与SVN支持的远程Mercurial回购合作
我现在工作的公司正在使用SVN。这里有许多团队都有自己的项目存储库。这些存储库有时相互依赖(使用svn:external),例如使用核心团队repo的一些最终用户项目等等 我想和我的团队一起从SVN转到Mercurial。我希望像这样设置工作流与SVN支持的远程Mercurial回购合作,svn,mercurial,workflow,hgsubversion,Svn,Mercurial,Workflow,Hgsubversion,我现在工作的公司正在使用SVN。这里有许多团队都有自己的项目存储库。这些存储库有时相互依赖(使用svn:external),例如使用核心团队repo的一些最终用户项目等等 我想和我的团队一起从SVN转到Mercurial。我希望像这样设置工作流 最初将我们当前的SVN回购克隆到Mercurial中,将其放到某个服务器上,并将其提供给团队成员(首次使用hg-serve) 团队成员只开始使用Mercural,不直接使用SVN提交、更新和签出。仅在根Mercurial回购中推/拉(在步骤1中设置) 最
hg-serve
)hg推送,路径部分带有svn回购。但是如上所述,它不会一直工作,可能需要在推送之前手动重新设置基础。正如您所发现的,HgSubversion的主要限制是,在推送它到Subversion时,您需要线性化您的多变历史。这意味着你在变化多端的历史中不可能有分支机构,因此很难作为一个团队一起工作 此外,当您推动Mercurial变更集时,HgSubversion将进行重基。假设您的团队在推送到TeamMercurial服务器之前仔细地重新确定了本地提交的基础。反复无常的历史是这样的:
... r10 --- a1 --- a2 --- b1 --- b2 --- b3
在那里,Alice和Bob在推送变更集之前重新设置了变更集的基础。当您与Subversion同步时,您会得到:
... r10 --- a1 --- a2 --- b1 --- b2 --- b3
\
r11 --- r12
HgSubversion现在将在[r12]
之上重新设置Mercurial变更集的基础:
... r10 --- r11 --- r12 --- a1' --- a2' --- b1' --- b2' --- b3'
Alice和Bob仍然有原始的未重定基调的变更集,没有素数。因此,他们需要在退出TeamMercurial服务器之前脱光衣服。这样的工作流程需要非常小心才能实现
我曾经为客户机设置了一个更简单的工作流:我们没有在Subversion修订版之上重新设置Mercurial变更集,而是将文件的当前版本提交给Subversion。这意味着我们不会在Subversion存储库中保存完整的Mercurial历史。另一方面,我们可以很容易地处理合并之类的事情
在上面的示例中,SVN服务器将从
b3
获得一个r13
以及Mercurial存储库的状态。r13
修订版将非常大:它包含在a1
到b3
中所做的所有更改。如果仍在使用Subversion的用户希望看到单独的更改,那么他们必须查看Mercurial服务器-我们在Subversion中输入的提交消息有指向Mercurial的hgweb
中单独更改集的链接,因此很容易跳到那里。正如您所发现的,HgSubversion的主要限制是,在将其推到Subversion时,您需要线性化您的多变历史。这意味着你在变化多端的历史中不可能有分支机构,因此很难作为一个团队一起工作
此外,当您推动Mercurial变更集时,HgSubversion将进行重基。假设您的团队在推送到TeamMercurial服务器之前仔细地重新确定了本地提交的基础。反复无常的历史是这样的:
... r10 --- a1 --- a2 --- b1 --- b2 --- b3
在那里,Alice和Bob在推送变更集之前重新设置了变更集的基础。当您与Subversion同步时,您会得到:
... r10 --- a1 --- a2 --- b1 --- b2 --- b3
\
r11 --- r12
HgSubversion现在将在[r12]
之上重新设置Mercurial变更集的基础:
... r10 --- r11 --- r12 --- a1' --- a2' --- b1' --- b2' --- b3'
Alice和Bob仍然有原始的未重定基调的变更集,没有素数。因此,他们需要在退出TeamMercurial服务器之前脱光衣服。这样的工作流程需要非常小心才能实现
我曾经为客户机设置了一个更简单的工作流:我们没有在Subversion修订版之上重新设置Mercurial变更集,而是将文件的当前版本提交给Subversion。这意味着我们不会在Subversion存储库中保存完整的Mercurial历史。另一方面,我们可以很容易地处理合并之类的事情
在上面的示例中,SVN服务器将从
b3
获得一个r13
以及Mercurial存储库的状态。r13
修订版将非常大:它包含在a1
到b3
中所做的所有更改。如果仍在使用Subversion的用户希望看到单独的更改,那么他们必须查看Mercurial服务器-我们在Subversion中输入的提交消息链接到Mercurial的hgweb
中的单独更改集,因此很容易跳到那里。是的,我同意。HgSubversion工作流不适合团队(即使对于个人来说也相当不舒服)。如果SVN丢失提交历史记录并不令人反感,那么最好只将快照提交给SVN(例如,在cron作业上或每次推送代码时)。Martin,Laurens-是的,在移动之后在SVN中丢失提交历史记录