【问题标题】:SVN does not see conflicts between original folder and moved versionSVN 看不到原始文件夹和移动版本之间的冲突
【发布时间】:2013-06-18 17:01:43
【问题描述】:

我在主干中有一个旧目录结构的文件夹,以及几个目录被分组为新文件夹的子文件夹的分支:

old(trunk) > root/dirA
                 /dirB
                 /dirC

new(branch) > root/dirGROUP/dirA
                           /dirB
                           /dirC

new 中的目录已使用 svn move 命令移动。

dirA和新dirA.文件之间存在文本冲突

当我执行svn merge --reintegrate http://url.to.the.branch 时,SVN 只会删除旧的dirAdirBdirC 并给我新的目录结构,而不会注意到新旧dirA 版本文件之间的冲突,就好像它是独立目录一样。新 dirA 中的文件已与 A 状态合并。
SVN 默认支持这种合并吗?如果是的话,原来我错过了一些东西
如果没有 - 如何教 SVN 注意到这种冲突?

【问题讨论】:

    标签: svn version-control merge branch tree-conflict


    【解决方案1】:

    这现在可能会有所帮助,我有两个解决方案。您遇到的问题可以通过这些方法来克服。

    解决方案1:

    假设您有以下文件

    /branch/foo/src/com
    /branch/foo/test/com
    /trunk/src/main/java/com
    /trunk/src/test/java/com
    

    在将 src/com 移动到 src/main/java/com 并将 test/com 移动到 src/test/java/com 之前,您可以这样做:

    cd $TRUNK
    svn merge -r N:M http://server/branch/foo .
    

    你现在可以做的是:

    cd $TRUNK
    svn merge -r N:M http://server/branch/foo/src/com src/main/java/com
    svn merge -r N:M http://server/branch/foo/test/com src/test/java/com
    

    或者你可以做的其他事情是

    解决方案2:

    1) svn up 获取最新的代码副本(在旧目录结构中)

    svn up 
    

    2) 在 dir 目录结构中使用 unix 命令复制目录

    cp -r /root/dirA /root/dirGroup/
    cp -r /root/dirB /root/dirGroup/
    cp -r /root/dirC /root/dirGroup/ 
    

    现在您在所需路径中有本地副本。

    3) 删除旧文件。

    svn -d file names.
    svn ci 
    

    4) 添加新文件和目录 svn 添加目录 svn 添加目录 svn 添加目录 所有三个目录的 svn ci

    【讨论】:

    • 感谢详细解答!我决定只使用辅助mercurial repo 进行此类合并 =))) 你能否澄清一下 - 假设我在 Q 中描述的“严格”方法进行合并 - 我们不能指望 SVN 会识别原始数据之间的冲突文件夹和移动的文件夹,因为 SVN 无法正确进行此类合并(没有您描述的技巧)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多