补丁文件由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选项,但还没有到达任何地方。
任何人都有任何提示吗?
答案 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行,请将它们全部更改为相同的签到注释。