【问题标题】:Working with Mercurial locally and SVN remotely?在本地使用 Mercurial 和远程使用 SVN?
【发布时间】:2011-10-06 13:15:49
【问题描述】:

在工作中我们使用 Subversion,但是因为没有人知道如何分支我们的“分支”涉及复制整个代码库并将其视为单独的存储库 - 这意味着我们对“补丁”分支所做的任何更改都需要复制/粘贴到主开发(“主干”)分支,因此它们是同步的,我们不能使用任何内置的合并工具(我们手动使用 WinMerge 或类似工具来查找更改的行)。没有人愿意花时间学习如何使用 SVN 的分支功能,而是鼓励使用这种策略作为替代方案。

由于我无法说服其他人研究真正的分支,我正在考虑为自己做一些事情以减少合并的痛苦。我想研究 Mercurial 有一段时间了(我之前在我的 Mac 上使用过一点 Git;工作中的 Windows7)作为 SVN 的批发替代品,如果我能得到支持的话。

我的问题是:首先,如果我必须将更改推送到两个 SVN 存储库,那么在我的本地计算机上使用 Mercurial 会不会很困难?在本地,我可以使用分支轻松地将代码合并回来,保持 SVN 存储库的不同将是一个简单的问题,将分支推送到补丁代码,并将 dev 分支(当然在合并后)推送到 SVN 中的 dev 分支,对?

其次,在我介绍 Mercurial 之前,有没有更好的方法来做到这一点?我试图告诉我的同事使用 SVN 的分支,但我得到的答案是“这暂时有效”,因为没有人愿意花时间学习 SVN 分支,而且 100% 老实说我从未使用过 SVN分支自己,所以我不确定使用起来有多容易/难,并且不想冒险尝试分支并搞砸一些事情。

【问题讨论】:

  • 我认为复制(尽管“廉价”复制)是在 SVN 中进行分支的标准方式。请注意,我不是 SVN 的大用户,但这就是我工作场所的一些项目的分支方式,以及 svn 书籍如何定义它。
  • 也许,我们没有使用 SVN 的分支,我的意思是我们实际上是在复制文件(基本上是进行 SVN 导出以获取所有文件,并重命名文件夹,然后将其重新提交到 SVN 并处理它作为一个完全不同的存储库)。
  • @WayneM 你是针对同一个还是不同的 svn repo 采取行动?
  • 我不是 100% 确定;查看回购浏览器,我看到一个“主”文件夹,假设它下面有两个文件夹:开发和补丁。我们将错误修复提交到 Patch,然后必须手动将更改复制到 Development。
  • 这里有一个问题,那就是您没有按预期使用这些工具。如果您决定不正确地学习分支,Mercurial、Git、Subversion、TFS、Vault,基本上任何 版本控制系统都会与您抗衡。您问是否有更好的方法来做到这一点,是的,您学习如何正确使用该工具。使用合并工具进行手动合并的问题在于,您需要准确了解更改的内容,否则可能会以错误的方式复制更改(即,您将分支 A 中的删除解释为分支 B 中的插入。)。

标签: windows svn mercurial


【解决方案1】:

首先,老实说,如果你收到这种关于 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 之间的根本不匹配意味着如果您想将更改推回,那么分支实际上是不可能的,您必须一直 rebase 并且很容易导致数据丢失。

【讨论】:

  • 合并变更集毫无问题地推送到 SVN。分支中的多头会让人头疼,是的,但是工作仓库总是只有代码提交和合并提交
【解决方案2】:

注意:

svn merge URL1 URL2

甚至可以用于不相关 URL(不同的repos)。在一个仓库中合并只是一种约定和工作流程

如果我必须将更改推送到两个 SVN 存储库,那么在我的本地计算机上使用 Mercurial 会不会很困难?

不,总是透明的

  • Repo1 for MainSVN pull MainSVN + pull Repo2 + 合并头 +push
  • 用于 DevSVN 的 MainSVN Repo2(拉取 DevSVN + 推入 DevSVN)

在我介绍 Mercurial 之前,有没有更好的方法?

请参阅我的开始说明 - 你至少可以尝试在 repos 之间进行原生 svn 合并

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多