我的公司正在从Subversion迁移到Mercurial。其中一个原因是Hg我们希望能够更独立地工作。
我们期待使用rebase作为我们从主存储库更新的主要方式,至少在开始时,将历史记录保持在一行,从而使从Subversion的过渡更容易。
现在,如果我们需要独立工作,我们有两个选择:在Subversion中创建一个分支,然后在那里提交(也就是合并地狱),或者根本不提交。有了Mercurial,我们希望能够继续在当地投入,并经常进行反转,从而获得独立性,同时免于创建命名分支的管理成本。
这一切听起来都很酷,直到备份进入图片。使用Subversion很明显,如果有人没有提交,他们的工作就会丢失。但是没有提交很快变得不方便(没有历史,没有日志消息等),所以人们会一次又一次地提交。
使用Mercurial,可以继续进行提交和变基,而无需长时间推动,从而使更多的工作面临风险。所以出现了一个问题:如何在开发人员的机器上备份这些东西?
还有其他方法吗?我想找到一个解决方案,让我们的开发人员在开始时使用他们的大部分Subversion知识。
答案 0 :(得分:4)
只是把它扔出去:我认为你犯了一个错误。线性历史不是什么大问题,拉/合并是更正常的mercurial工作流程。拥抱非线性历史,并为特殊场合留下坚固。
你说“有了Mercurial,我们希望能够继续在本地提交,并且每隔一段时间就进行一次折扣,从而获得独立性,同时免于增加命名分支的管理成本。”但是在mercurial中,使用未命名的分支为此,所以没有管理费用。
请参阅http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously,了解自动创建的未命名分支如何以零麻烦为您提供您想要的内容。
我知道这听起来好像是非常好的蛇油,但是当他们通过和没有任何人时,你的人可以hg pull
和hg 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。稍后迁移仍然很容易。