svn 与分支中重命名的目录合并

svn merge with renamed directory in branch

我的工作场所最近有一项要求,其中我们有一个基线 Android 项目(主干)。其他项目将需要 (svn) 从这个基线 Android 项目分支出来并开始他们自己的开发线。

现在假设我的 svn 的当前状态是:

--r19--------r30----->my.package.baseline(trunk)
    |
    |--r24--r29------>my.newpackage.projectA(branch)

如果我想将 r30 应用到我的所有其他分支,即使 directory/package 已经由于 r24?

如果你问的只是你是否能够承诺,答案是肯定的。

如果你足够幸运,r24 和 r29 中更改的文件与 r30 中更改的文件只是不同的文件,那么它就可以正常工作。

如果某些文件在 r24 中被更改或 r29 在 r30 中也被触及,那么您可能 运行 陷入 svn 冲突,只要执行合并的人理解两者中的代码更改,它仍然可以工作branches(t运行k and your branch),这个人不仅需要解决明显的svn冲突(一个文件中的相同区域在两个分支中都被更改),还需要解决代码逻辑冲突,我的意思是没有 svn 冲突但它不会再编译,或者更改之间的逻辑冲突会在代码中引入新错误。

这里我的建议是,merge之后,解决svn冲突后立即commit,不用担心逻辑冲突。您在单独的新提交中解决逻辑冲突。根据我的经验,这将在您合并回 t运行k 时避免一些罕见的麻烦。正如 svn 对合并所做的那样,它修改了 mergeinfo 属性,因为您的分支中的示例 mergeinfo 类似于

trunk: r30

svn 将使用此信息来确定当您决定合并回 t运行k 时应该如何执行合并,如果您的分支具有从 t运行k 到日期的所有内容,假设你解决了所有冲突,它只是用你的分支替换 t运行k ,但是如果你选择了 cherry-pick ,它会以不同的方式使用事物合并信息来尝试尽可能自动解决冲突,所以如果你提交逻辑修复不同的提交不太可能 运行 进入 svn 冲突。

功能分支 运行s 越长,如果 t运行k 同时不断变化,您将面临的问题越多。但它就是这样,这就是分支的工作方式,你应该有一个计划,关于你要从 t运行k 合并的频率以及你想保留你的分支多长时间。尝试将您的任务分割成更小的部分,以便您的分支的生命周期更短,例如两周,这与您保留一个分支三个月然后将所有这些更改合并回 t运行 相比会有很大的不同k.