代码之家  ›  专栏  ›  技术社区  ›  Ivan Vučica

将Hg更改提交回SVN

  •  16
  • Ivan Vučica  · 技术社区  · 14 年前

    我开始在一个SVN仓库工作。我把它的一个子文件夹克隆到一个本地Hg repo中 hg clone .

    之后,我想与一位无权访问SVN存储库的同事分享这一点。我已经创建了一个私有的BitBucket存储库,我们偶尔会推送更改,因此我不得不拉它们。

    hgsubversion

    现在,由于我们挚爱的朋友,我无法将更改推回到Subversion存储库中, abort: Sorry, can't find svn parent of a merge revision.

    如何将BitBucket targeting Mercurial存储库与svn targeting Mercurial存储库结合起来,同时与 hgsubversion公司

    当然,希望能有一些自动化的方法来实现这一点,但如果没有这样的方法/简单的方法来实现这一点,我将非常感谢任何解决方案。

    我用 hgsubversion公司 ,不是 hgsvn hg clone svn://repo/url . 不过,如果有必要的话,我愿意改变。

    3 回复  |  直到 12 年前
        1
  •  21
  •   Community Neeleshkumar S    7 年前

    当您在subversion存储库上使用Mercurial时,您仍然需要像SVN那样思考,因此基本Mercurial工作流中的许多功能部分都无法工作。合并mercurial的方式在svn仓库是不可能的。如果你已经将你的工作与拉svn分支合并,你将得到臭名昭著的关于你现在得到的信息:(

    我建议你读一下杜林42的答案 this question

    编辑:为了摆脱当前的混乱,我建议您从SVN repo中签出时创建一个补丁(或一系列补丁)。从subversion存储库获取新的副本并应用补丁。我不确定你是否能从目前的回购协议中做到这一点。您可以探索hg diff命令。

    hg diff -g -r tip -r XXX > patch
    

    XXX是你最初的SVN结账(我还没有测试过)

        2
  •  10
  •   0xC0000022L    12 年前

    是的,hgsubversion确实更改了提交者名称,因为它必须反映Subversion分配的名称。Hgsubversion公司 必须 然后还要更改变更集哈希。这并不是hgsubversion真正能够决定的事情——它内置于Mercurial的设计中,变更集散列基于变更集中的所有信息,包括提交者的名称。

    请看我的 hgsubversion guide 有关如何正确使用hgsubversion的信息。要记住的重要一点是hgsubversion hg 变成更好的 svn

    如果您确实想利用Mercurial中的分布式特性,那么可以在小的迭代中进行:在Mercurial中进行一些协作,使变更集线性化并返回Subversion,销毁克隆的非线性部分,从Subversion中提取。然后可以在Mercurial中重复新的协作迭代。

        3
  •  0
  •   Darkseal    9 年前

    我碰到了一个类似的问题,基本上是:

    • 使用HgSubversion克隆SVN repo
    • 通过合并来解决问题

    遇到了可怕的 Sorry, can't find svn parent of a merge revision 信息。

    1. 从下载TortoiseSVN this link 然后安装。
    2. 使用将SVN repo签出到新文件夹 SVN Checkout...
    3. 复制本地HG文件夹的内容(不包括 .hg 仅限子文件夹)到新创建的SVN文件夹,覆盖所有文件。
    4. 右键单击该文件夹并执行 SVN Commit...
    5. 扔掉你的HG回购协议,从现在更新的SVN回购协议中收回。