合并后在分支上提交日志会发生什么?

Lev*_*ith 41 svn merge branch

场景:

  1. 程序员在修订版5中为项目'foo'创建一个名为'my_foo'的分支
  2. 程序员在处理'my_foo'功能时会对多个文件进行多项更改.
  3. 在每个主要步骤结束时,比如在类中添加几个新函数,程序员svn commit对相应的文件执行操作,因此将它们提交到分支
  4. 经过几周和许多提交之后(每个提交都有一个描述他所做的提交日志),程序员将分支合并回主干:

#Assume the following is being done from inside a working copy of the trunk:
svn merge -r 5:15 file:///path/to/repo/branches/my_foo

Hazzah!他将所有的变化合并到了后备箱!Mountain Dew有很多欢乐和喝酒.

现在让我们说另一位程序员在一周之后出现并将他们的工作副本从第5版更新到第15版."哇",他们说."我想知道自修订版5以来发生了什么变化".然后程序员svn status在他们的工作副本上做一个他们得到这样的东西:

------------------------------------------------------------------------
r15 | programmer1 | 2010-03-20 21:27:04 -0400 (Sat, 20 Mar 2010) | 1 line

Merging Version 2.0 Changes into trunk
------------------------------------------------------------------------
r5 | programmer2 | 2010-02-15 10:59:55 -0500 (Mon, 15 Feb 2010) | 1 line

Added assets/images/tumblr_icon.png to trunk

对于其他程序员在他的分支中提交所有提交的所有注释,发生了什么?合并期间那些没有被拉过来的人吗?我疯了还是忘了什么?

Ted*_*val 43

尝试svn log -g包括自Subversion 1.5以来存储的合并历史记录.


小智 15

TortoiseSVN在"显示日志"对话框的底部有"包含合并修订"复选框,以包含提交给分支的注释.


Thi*_*ilo 9

答案已经过时,现在我们已经过时了svn log -g.


不,你不疯狂.不幸的是,这就是它的工作原理.

您可以做的最好的事情是在合并提交消息中包含分支URL和修订号,以便可以手动查找该分支的修订日志.(当然,数据仍在那里).

但是,您不知道哪些更改已进入主干,哪些没有.

如果主干上没有或几乎没有变化,则可以选择进行反向合并(从主干合并到分支),然后用分支替换主干.这种推理也可以在单个子文件夹上完成(例如:从分支中替换XML解析器实现子文件夹,保留其余部分).替换文件夹(使用svn delete,svn copy)将保留修订历史记录.

对于在合并期间新添加的文件,如果使用svn copy命令,则可以从分支复制其修订历史记录.但是不确定merge命令是否包含对此的支持.

知道svn是否有一个"rebase"工具(如git或mercurial)可能会很有趣.这将为分支上的每个更改创建单独的提交.另一方面,也许个别提交太杂乱了.

我可以给出的最佳建议是使用一个好的UI,例如Trac,这样可以很容易地检查修订历史记录,这样您就可以查看分支上发生的事情.

  • 这个解决方案不是"你能做的最好的",应该提到`svn log -g` (2认同)