将svn补丁应用于mercurial存储库时出现问题

时间:2010-03-09 03:06:10

标签: svn mercurial tortoisesvn

补丁文件由TortoiseSVN->制作。创建补丁...

尝试使用hg import patchfile将修补程序导入mercurial存储库。

hg如何查找补丁文件中引用的文件似乎存在问题:

unable to find 'gui/gui/RemoteFramework.cpp' for patching
2 out of 2 hunks FAILED -- saving rejects to file gui/gui/RemoteFramwork.cpp.rej

这似乎是根据目录和应该应用的位置制作补丁的问题。我尝试过使用hbase import的--base选项,但还没有到达任何地方。

任何人都有任何提示吗?

2 个答案:

答案 0 :(得分:10)

我怀疑您需要执行hg import --strip 0 patchfile,因为Subversion在文件路径中不包含任何前缀。 --base指定搜索文件的位置,--strip表示在diff标头的开头忽略多少(默认1)路径元素。

答案 1 :(得分:0)

我在将项目CartoType从Subversion移动到Mercurial时遇到了同样的问题。我将Subversion内容签出到C:\ CartoType,以及C:\ CartoType-mercurial中的Mercurial存储库的克隆。

我使用TortoiseSVN来创建统一的差异文件,并发现它使用的路径如C:/CartoType/src/main/router/cartotype_router.h。在C:\ CartoType-mercurial中运行hg补丁,我发现正确的做法是从路径中删除两个元素,因此:

hg patch -p2 c:\temp\patch1982.diff

我需要做的另一件重要的事情是用签到注释替换diff文件中的'Index'行,因为这是hg补丁从中获取它们的地方。所以在这个例子中我必须从

更改我的diff文件的第一行
Index: C:/CartoType/src/main/router/cartotype_router.h

Added an optional parameter to NewRoadOrWalkingRouter... (etc.)

如果diff文件中有多个Index行,请将它们全部更改为相同的签到注释。