在工作中我们使用Subversion,但因为没有人理解如何分支我们的“分支”涉及复制整个代码库并将其视为一个单独的存储库 - 这意味着我们对“补丁”分支所做的任何更改都需要复制/粘贴到主开发(“trunk”)分支,因此它们是同步的,我们不能使用任何内置的合并工具(我们手动使用WinMerge或类似工具来查找更改的行)。没有人愿意花时间学习如何使用SVN的分支功能,而是鼓励使用这种策略作为替代方案。
由于我不能说服其他人去研究真正的分支,我正在寻找为自己做点什么来减少合并的麻烦。我想看看Mercurial已经有一段时间了(我以前在我的Mac上使用了Git;在工作中使用了Windows7)作为SVN的批发替代品,如果我能得到买入的话。
我的问题是:首先,如果我不得不将更改推送到两个SVN存储库,那么在本地计算机上使用Mercurial会有困难吗?在本地我可以使用分支来轻松地合并代码,保持SVN repos不同将是一个简单的问题,将分支推送到补丁代码,dev分支(当然合并后)到SVN中的dev分支,对?
第二,在我介绍Mercurial之前,还有更好的方法吗?我试图告诉我的同事使用SVN的分支,但我得到的答案是“这个现在有效”因为没有人想花时间学习SVN分支,并且100%诚实我从未使用过SVN分支我自己,所以我不确定使用它有多容易/多难,并且不想冒险尝试分支和弄乱某些东西。
答案 0 :(得分:2)
首先,老实说如果你对SVN分支最基本的东西做出这样的回应,你真的认为你可以说服他们切换整个存储库系统吗?
可以肯定的是,“不想冒险尝试分支和弄乱某些东西”是SVN的典型特征,而且Mercurial做得更好;因为你总是在本地存储库中工作,试验和犯错是很便宜的,如果你陷入困境,你可以制作一个新的克隆。除了必须保存大量二进制数据(如艺术存储库)的存储库之外,我绝对会在几乎任何情况下推荐Mercurial而不是SVN。
至于你的问题,
原则上,您可以为Mercurial存储库和SVN存储库使用相同的工作目录。您可能希望将.hg和.svn添加到SVN和Mercurial的忽略过滤器,当然,您提交给Mercurial的更改不会自动提交到SVN。但是,使用Mercurial作为本地开发的暂存器可能很方便。如果你想要进行两次SVN检查,你可以通过拉动或推送Mercurial克隆之间的数据来实际交换数据。
老实说,回答你的第二个问题,我认为“更好的方法”只是学习SVN的分支和合并机制。在SVN上运行Mercurial可能非常麻烦,可能比它的价值更麻烦。如果你想试验SVN合并,你可以建立一个测试SVN存储库来练习分支和合并。
如果您的同事决定使用SVN并且不能为Mercurial烦恼,那么您可能只需要忍受它。也许在类似的情况下有许多事情有一些安慰,我个人喜欢尽快停止使用SVN,但仍然在我以前和现在的公司我不幸地坚持下去。虽然在我现在的公司,他们可以在将来的某个时候改变它,我们已经在使用git进行外部项目了。
我应该提到的另一件事是:有一些像hgsubversion扩展的工具允许你在SVN之上使用Mercurial,将所有提交转换为Mercurial提交。我不会真的推荐这一点,特别是如果你是一个新手Mercurial用户,SVN和Mercurial之间的根本不匹配意味着如果你想要推回你的更改,你真的不可能进行分支,你必须一直重新调整和你很容易就会导致数据丢失。
答案 1 :(得分:1)
注意:
svn merge URL1 URL2
甚至可用于不相关的网址(不同的回购)。在一个仓库中合并只是一个惯例和工作流程
如果我不得不将更改推送到两个SVN存储库,那么在本地计算机上使用Mercurial会很困难吗?
不,永远是透明的
在我介绍Mercurial之前,还有更好的方法吗?
查看我的开始笔记 - 你至少可以尝试本地svn合并之间的回购