尝试合并(从分支机构)目录中尚不存在的文件。这是一个例子:
Trunk(我们从中分支)
/
/root1.txt
/foo/foo1.txt
分行(2次登记后)
/
/root1.txt
/foo/foo1.txt
/bar/bar1.txt
/bar/bar2.txt
首先登记:
A /bar
A /bar/bar1.txt
第二次登记:
A /bar/bar2.txt
假设主干没有改变,是否可以仅 /bar/bar2.txt进入主干?以下是我已经尝试过的解决方案:
svn merge -rX:X+1 /path/to/branch/bar . --> nothing gets merged here
svn merge -rX+1:X+2 /path/to/branch/bar . --> pulls bar2.txt into the trunk but not within bar directory
svn merge -rX:X+1 /path/to/branch . --> pulls both directory and bar1.txt into trunk
svn copy /path/to/branch/bar . --> recursively copies directory bar into trunk
mkdir /path/to/trunk/bar
svn add bar
svn merge -rX+1:X+2 /path/to/branch/bar bar/
这里的最终解决方案有点有效。它允许我只将bar2.txt拉入主干并继续,但是当我尝试将我的分支重新集成回主干后,你就会在目录上出现树冲突(目录在两个地方都被添加 - >'local add,收货时加入合并')。
我理解,如果我的团队会做更精细的谷物检查 - 即在一次提交中添加目录而在另一次提交中添加文件 - 那么我可以合并,因为我正在尝试上面。这是唯一的解决方案吗?
谢谢!
答案 0 :(得分:2)
试试这个:
svn merge http://url/to/trunk/bar http://url/to/branch/bar bar/
如果您将所有合并命令视为简单应用差异,则会更容易。比较svn help merge
与svn help diff
的输出 - 它们非常相似。一旦你找到了svn diff
命令,它将完全生成你需要的变更集,请将它应用到正确的目录中并进行设置!
所以在你的情况下,你需要的是bar / on trunk和bar / on branch之间的区别,应用于bar的本地(trunk)版本。
编辑:如果在主干中还没有bar /,则可以使用简单的svn复制操作:
svn copy http://url/to/branch/bar http://url/to/trunk/bar -m'merging new directory bar/'
(请注意,目标是svn存储库本身,而不是工作副本。)
答案 1 :(得分:0)
问题是您在A bar
的同一修订版中提交了A bar/bar1.txt
。
我会在两次提交之前恢复。然后单独提交A bar
,然后提交A bar/bar1.txt
,然后提交A bar/bar2.txt
。然后,您应该能够将所需的单个修订与主干合并。
更新:也许this document可以让您按照自己的意愿行事。虽然看起来对我来说有些迟钝。
Mergeinfo,或更具体地说是 版本化属性svn:mergeinfo,是 合并的历史变成了一个 给定的文件或目录。本文 详细介绍了mergeinfo; 这意味着什么以及如何运作。