如何备份本地Mercurial存储库并使用rebase?

时间:2010-10-25 19:00:35

标签: mercurial

我的公司正在从Subversion迁移到Mercurial。其中一个原因是Hg我们希望能够更独立地工作。

我们期待使用rebase作为我们从主存储库更新的主要方式,至少在开始时,将历史记录保持在一行,从而使从Subversion的过渡更容易。

现在,如果我们需要独立工作,我们有两个选择:在Subversion中创建一个分支,然后在那里提交(也就是合并地狱),或者根本不提交。有了Mercurial,我们希望能够继续在当地投入,并经常进行反转,从而获得独立性,同时免于创建命名分支的管理成本。

这一切听起来都很酷,直到备份进入图片。使用Subversion很明显,如果有人没有提交,他们的工作就会丢失。但是没有提交很快变得不方便(没有历史,没有日志消息等),所以人们会一次又一次地提交。

使用Mercurial,可以继续进行提交和变基,而无需长时间推动,从而使更多的工作面临风险。所以出现了一个问题:如何在开发人员的机器上备份这些东西?

  • 一种解决方案是使用一些外部备份软件,但这听起来不是一个好主意。
  • 我们也可以一直推送到主要的回购(甚至可能自动?),但是这样就不可能使用变基,并且会导致很多主要的悬空头。
  • 我们可以推送备份回购,并尝试在主回购中只有一个头。这听起来很复杂。

还有其他方法吗?我想找到一个解决方案,让我们的开发人员在开始时使用他们的大部分Subversion知识。

3 个答案:

答案 0 :(得分:4)

只是把它扔出去:我认为你犯了一个错误。线性历史不是什么大问题,拉/合并是更正常的mercurial工作流程。拥抱非线性历史,并为特殊场合留下坚固。

你说“有了Mercurial,我们希望能够继续在本地提交,并且每隔一段时间就进行一次折扣,从而获得独立性,同时免于增加命名分支的管理成本。”但是在mercurial中,使用未命名的分支为此,所以没有管理费用。

请参阅http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously,了解自动创建的未命名分支如何以零麻烦为您提供您想要的内容。

我知道这听起来好像是非常好的蛇油,但是当他们通过和没有任何人时,你的人可以hg pullhg merge以及hg push不得不考虑分支机构名称,或谁拥有什么克隆,或任何东西,你将有一个协调中心与断开的工作。

答案 1 :(得分:1)

你也可以给每个开发者一个回购:

https://example.com/repos/awesome-product
https://example.com/repos/awesome-product-wolever
https://example.com/repos/awesome-product-pintér

他们可以推动他们想要的一切。

这意味着很多悬空头,但这可能没问题,因为没有人会看到它们,直到恢复时间......然后你只需要当前提示的祖先:

hg pull https://example.com/repos/awesome-product-wolever -r tip

如果我使用这个方案,我会设置:

[paths]
backup = https://example.com/repos/awesome-product-wolever
.hgrc/hgrc中的

或者,您可以通过在全局~/.hgrc中设置此代码来为每个开发人员提供一个整体备份回购:

[paths]
backup = https://example.com/repos/wolever-backup

答案 2 :(得分:1)

我认为你做错了。
您所描述的内容看起来更像是在尝试设置一个工具来确保/强制一个流程,而不是支持流程。

与集中式方法相比,以分散的方式工作是一个相当大的转变,并且通过尝试设置您描述的类型约束,很可能会对开发人员感受到的体验造成更多伤害而不是好处。

如果您害怕他们不会定期将更改推送到主存储库,那么问问自己(并问他们)会很好“我们是否准备好改变我们的过程” 许多人仍然声称DVCS会给他们的软件工厂带来混乱。确实,DVCS不会强制执行线性(单点故障)工作方式,但是带来混乱的不是工具,而是你在公司中建立的团队精神。

现在,如果您已经迁移到Mercurial(因为它已经出售给管理级别,或者其他任何东西),但是对于SVN方法感觉更舒服,只需要一点“加号”,试试首先使用HgSubversion。稍后迁移仍然很容易。