SVN:有没有办法将在修订版下提交的文件的所有最新修订版复制到分支,但仅限于那些文件?

SVN: Is there a way to copy to a branch all the latest revisions of the files committed under a revision, but only of those files?

我已通读 "SVN book" 但找不到我要找的内容。

假设我有 trunk 和 branch_test,字母代表提交的文件:

因为有 1 个声誉我不能 post 图片,这里是 ASCII 绘图:



文件:(A、B、C、E、R、Z)

     ZR
     是
     A C A C
  9 10 11 12 13
--r--r---r---r---r--- 后备箱
    \
     ---------------------- branch_test

修订版 10:将 function1( ) 添加到文件 A
修订版 12:将 function2( ) 添加到文件 A

这是上图的图像版本:http://s22.postimg.org/hkzsavb35/SVN_diagram.png

我想将文件 R、E 和 A 的修订版 12 从主干复制到 branch_test。好像我想要那个阶段的那些文件的快照,其中包括从以前的修订到那个日期的所有内容。但仅限于该修订中涉及的那些文件。

    cd 分支工作副本
    svn merge -c 12 ^/project/trunk

它只会将差异上传到工作副本,这意味着 function2() 将被复制,但 function1() 不会存在于分支中。

有没有办法在 svn 中做到这一点?除了必须单独获取所有文件并复制它们的最新修订版 "by hand"(在个人基础上)?

P.S.: 用例是什么?有时我 ready/need 将修改 (12) 复制到我们的测试分支,但我还没有准备好用以前的修改 (r10) 来做,尽管我需要一些以前修改的更新文件。

首先,回答您的直接问题:您需要 "cherry pick merge" 每个单独的文件。幸运的是 svn merge 可以作用于单个文件以及目录路径。

可以 cherry-pick 合并所有感兴趣的修订,然后还原您不想要的文件更改,但是合并信息是错误的,以后的合并将被忽略即使有更多更改要应用,该修订版也是如此。

但是,更好的问题是,为什么您首先只需要将一部分提交到您的分支?如果您有效地使用 SVN,那么每个提交将只包含相关的更改,您几乎总是希望将这些更改放在一起,或者根本不需要。您是否一起提交了一堆不相关的更改?如果是这样,您应该考虑改变您的开发过程,而不是解决它。