需要将来自一个远程分支的repo clone提交到不同的远程分支

时间:2013-05-03 15:04:05

标签: mercurial

我们在一个单独的服务器上有一个主存储库。我最初克隆了默认分支并在本地进行了更改。我在本地提交了这些更改。但是,在主存储库上创建了一个分支,我想将其更改为。以下是我尝试完成此任务的说明。

我克隆了分支。我试图从本地默认导出我的更改,如下所示:

C:\hg\default>hg export -g -o mypatch -r tip

当尝试将它们导入新分支的克隆时,我得到以下内容:

C:\hg\newBranch>hg import C:\hg\default\mypatch
applying C:\hg\Fill1\mypatch
patching file .hgignore
Hunk #1 FAILED at 11
1 out of 1 hunks FAILED -- saving rejects to file .hgignore.rej
abort: patch failed to apply

我可以手动修复.hgingore.rej文件。问题是该补丁还包含已移动的文件。运行hg status时,我得到以下内容,而不是显示为已移动的文件:

C:\hg\newBranch>hg status -C
M someOtherFilesThatLookAsExpected.txt
! originalLocaion\fileA.txt
? newLocation\fileA.txt

此缺失和新状态适用于包含已应用修补程序的提交中移动的所有文件。难道我做错了什么?在应用补丁时,我是否总是需要手动移动文件?有没有更简单的方法来完成这种分支转移?

1 个答案:

答案 0 :(得分:1)

如果不了解更多有关您的存储库结构的内容,这有点难以回答,但这是我如何在不了解更多信息的情况下解决这个问题。我假设冲突的原因是存储库的同一分支中存在冲突的变化。

首先,获取newBranch存储库的内容:

cd c:\hg\default
hg pull c:\hg\newBranch

然后,在顶部合并或改变您的更改。如果您正在使用相同的分支,那么只需使用

hg pull --rebase c:\hg\newBranch

代替常规拉应该做(假设你已经启用了基础)。否则,请对需要协调的两个头进行显式合并或重新绑定。最后,做:

hg push -r tip c:\hg\newBranch

为了让您(现已调和)的更改回到newBranch。

除非您有非常具体和不寻常的要求,pushpull应该是您正常的同步存储库或部分存储库的方法(请注意,使用-r只会推/拉相应的分支) 。导出/导入是相当低级的机制,可能无法为您提供处理重命名,三向合并逻辑等的标准机制的好处。