Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何区分Mercurial中的两个任意修订版,以便将其应用于SVN工作副本?_Svn_Mercurial - Fatal编程技术网

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

如何区分Mercurial中的两个任意修订版,以便将其应用于SVN工作副本?,svn,mercurial,Svn,Mercurial,记录系统是一个SVN存储库,但出于任何原因,我将存储库拉入Mercurial。我不想使用hgsubversion扩展,因为它不建议创建额外的克隆和分支等等 我希望能够在Mercurial中进行我自己的开发,但我希望,然后对我的SVN工作副本应用一个巨大的补丁(或小补丁),并随时进行更改 因此,我: /dev/repos/hg/project/master /dev/repos/hg/project/master-feature-foo ... 在Mercurial方面和SVN方面,我有: /d

记录系统是一个SVN存储库,但出于任何原因,我将存储库拉入Mercurial。我不想使用hgsubversion扩展,因为它不建议创建额外的克隆和分支等等

我希望能够在Mercurial中进行我自己的开发,但我希望,然后对我的SVN工作副本应用一个巨大的补丁(或小补丁),并随时进行更改

因此,我:

/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 patch的文档以获取线索,但我还没有找到解决方案。

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

hg差异和修补程序:

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
另一种方法是使用,在这种情况下,可以使用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

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

非工作方式A1:删除SVN工作副本内容,然后在Mercurial工作副本上进行复制

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

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

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

方法A2的优点:

1) 这很容易

在svn工作副本根目录中,运行以下命令:

# 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进行提交(您可以通过这种方式轻松验证所有更改)

话虽如此,我还是接受前面的答案,因为这可能是正确的方法