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。好像我想要那个阶段的那些文件的快照,其中包括从以前的修订到那个日期的所有内容。但仅限于该修订中涉及的那些文件。
- 我不想要修订版 11 到 12 的区别。因为如果我在 r10 中的文件 A 中添加了一个 function1(),在 r12 中的同一个文件 A 中添加了一个 function2(),并且我 "cherry pick":
cd 分支工作副本
svn merge -c 12 ^/project/trunk
它只会将差异上传到工作副本,这意味着 function2() 将被复制,但 function1() 不会存在于分支中。
- 我不想修改第 10 版中的 Z 文件,也不想修改第 11 版中的 C 文件。我只想要提交 r12 时 "current" 整个文件是什么,但是只有提交中涉及的那些文件。在这个例子中,我想要文件 R、E 和 A 以及自修订版 9 以来的所有更改。但我不想手动 select 文件 R、E 和 A。
有没有办法在 svn 中做到这一点?除了必须单独获取所有文件并复制它们的最新修订版 "by hand"(在个人基础上)?
P.S.: 用例是什么?有时我 ready/need 将修改 (12) 复制到我们的测试分支,但我还没有准备好用以前的修改 (r10) 来做,尽管我需要一些以前修改的更新文件。
首先,回答您的直接问题:您需要 "cherry pick merge" 每个单独的文件。幸运的是 svn merge
可以作用于单个文件以及目录路径。
您可以 cherry-pick 合并所有感兴趣的修订,然后还原您不想要的文件更改,但是合并信息是错误的,以后的合并将被忽略即使有更多更改要应用,该修订版也是如此。
但是,更好的问题是,为什么您首先只需要将一部分提交到您的分支?如果您有效地使用 SVN,那么每个提交将只包含相关的更改,您几乎总是希望将这些更改放在一起,或者根本不需要。您是否一起提交了一堆不相关的更改?如果是这样,您应该考虑改变您的开发过程,而不是解决它。
我已通读 "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。好像我想要那个阶段的那些文件的快照,其中包括从以前的修订到那个日期的所有内容。但仅限于该修订中涉及的那些文件。
- 我不想要修订版 11 到 12 的区别。因为如果我在 r10 中的文件 A 中添加了一个 function1(),在 r12 中的同一个文件 A 中添加了一个 function2(),并且我 "cherry pick":
cd 分支工作副本 svn merge -c 12 ^/project/trunk
它只会将差异上传到工作副本,这意味着 function2() 将被复制,但 function1() 不会存在于分支中。
- 我不想修改第 10 版中的 Z 文件,也不想修改第 11 版中的 C 文件。我只想要提交 r12 时 "current" 整个文件是什么,但是只有提交中涉及的那些文件。在这个例子中,我想要文件 R、E 和 A 以及自修订版 9 以来的所有更改。但我不想手动 select 文件 R、E 和 A。
有没有办法在 svn 中做到这一点?除了必须单独获取所有文件并复制它们的最新修订版 "by hand"(在个人基础上)?
P.S.: 用例是什么?有时我 ready/need 将修改 (12) 复制到我们的测试分支,但我还没有准备好用以前的修改 (r10) 来做,尽管我需要一些以前修改的更新文件。
首先,回答您的直接问题:您需要 "cherry pick merge" 每个单独的文件。幸运的是 svn merge
可以作用于单个文件以及目录路径。
您可以 cherry-pick 合并所有感兴趣的修订,然后还原您不想要的文件更改,但是合并信息是错误的,以后的合并将被忽略即使有更多更改要应用,该修订版也是如此。
但是,更好的问题是,为什么您首先只需要将一部分提交到您的分支?如果您有效地使用 SVN,那么每个提交将只包含相关的更改,您几乎总是希望将这些更改放在一起,或者根本不需要。您是否一起提交了一堆不相关的更改?如果是这样,您应该考虑改变您的开发过程,而不是解决它。