代码之家  ›  专栏  ›  技术社区  ›  les2

我如何区分Mercurial中的两个任意修订,以便将其应用于SVN工作副本?

  •  1
  • les2  · 技术社区  · 16 年前

    所以我有:

    /dev/repos/hg/project/master
    /dev/repos/hg/project/master-feature-foo
    ...
    

    在Mercurial和SVN方面,我有:

    /dev/repos/svn/project
    

    我希望能够用我的mercurial工作副本的内容覆盖我的SVN工作副本/dev/repos/SVN/project,比如/dev/repos/hg/project/master feature foo。

    哪些Mercurial和SVN命令有助于实现这一点?我正在查看hg diff、hg export和TortoiseSVN apply补丁的文档以获取线索,但我还没有找到解决方案。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Rudi    16 年前

    有几个选项可以将提示传输到svn目录:

    汞差异和;补丁:

    cd /svn/working/copy
    hg -R /hg/working/copy -r svn.15500:tip | patch -p1`
    

    复制更改的文件

    #!/bin/bash
    REV=$1
    HG=/hg/working/copy
    
    cd /svn/working/copy
    
    # copy changed files, tar is used instead of cp to preserve file paths
    hg -R $HG st --rev $REV:tip -man0 | xargs -0 tar -cC $HG | tar x
    
    # add new files, cuses warnings if there are no new files
    hg -R $HG st --rev $REV:tip -an0 | xargs -0 svn add
    
    # remove deleted files, will cause warnings if there are no deleted files
    hg -R $HG st --rev $REV:tip -rn0 | xargs svn rm
    

    另一种方法是使用 tortoisehg ,其中与rebase扩展一起克隆是可能的。这将是以下工作流:

    hgimportsvn http://svn.server/repo/trunk
    cd trunk
    hgpullsvn
    cd ..
    hg clone trunk work
    cd work
    #Hack Hack Hack
    
    cd ../trunk
    hgpullsvn
    # if there are new revisions rebase ../work before pull
    hg pull ../work
    hgpushsvn
    
    #rebase
    cd work
    hg pull --rebase
    
        2
  •  0
  •   Jon Adams    14 年前

    我认为我最后所做的是相当蹩脚的。我的目标是获取我的Mercurial存储库的内容并用它们覆盖我的SVN工作副本(这样我可以稍后将它们提交给SVN)。我真的不关心Mercurial的详细更改历史-提交将在SVN repo中“汇总”。

    不起作用,因为。。。.svn文件夹将被销毁。

    工作方法,A2:使用find命令从svn工作副本中删除除.svn文件夹以外的所有内容。那就把那份水银的工作副本复印过来。SVN将检测更改并允许我提交。

    方法A2的问题: 2如果有任何目录是空的,Mercurial将不会跟踪这些目录,但它们将在SVN存储库中(我没有遇到这个问题,但它可能会发生)。 三。在SVN方面失去反复无常的历史。因为SVN元数据没有Mercurial的丰富,所以您对此无能为力。 4只有一个开发人员在SVN repo中提交时才是好的。如果多个开发人员正在提交,那么您必须与他们的所有更改同步,包括将这些更改与所有克隆同步。

    在svn working copy root中,运行以下命令:

    # delete all files in an SVN working copy, except those
    # in the .svn folders; directories are not deleted
    find . -path "*.svn" -prune -o -type f -exec rm -v {} +
    

    使用文件管理器将Mercurial工作副本内容拖到SVN工作副本中(可以使用脚本)。

    使用TortoiseSVN来提交(这样可以很容易地验证所有更改)。