Svn 合并后提交分支上的日志会发生什么情况?

Svn 合并后提交分支上的日志会发生什么情况?,svn,branch,merge,Svn,Branch,Merge,情景: 程序员在修订版5中为名为“my_foo”的项目“foo”创建一个分支 程序员在使用“my_foo”功能时对多个文件进行多次更改 在每个主要步骤的末尾,比如说向一个类添加几个新函数,程序员对相应的文件执行svn commit,从而将它们提交到分支 经过几周和多次提交(每次提交都有一个提交日志描述他所做的事情),程序员将分支合并回主干: 哈札!他把所有的改动都合并回了行李箱!这里有很多欢乐和山露的饮用 现在让我们假设另一个程序员在一周后出现,并将他们的工作副本从修订版5更新到修订版15。“哇

情景:

  • 程序员在修订版5中为名为“my_foo”的项目“foo”创建一个分支
  • 程序员在使用“my_foo”功能时对多个文件进行多次更改
  • 在每个主要步骤的末尾,比如说向一个类添加几个新函数,程序员对相应的文件执行
    svn commit
    ,从而将它们提交到分支
  • 经过几周和多次提交(每次提交都有一个提交日志描述他所做的事情),程序员将分支合并回主干:
  • 哈札!他把所有的改动都合并回了行李箱!这里有很多欢乐和山露的饮用

    现在让我们假设另一个程序员在一周后出现,并将他们的工作副本从修订版5更新到修订版15。“哇”,他们说。“我想知道自第五次修订以来发生了什么变化”。然后程序员在他们的工作副本上执行
    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 ------------------------------------------------------------------------ r15 |编程人员1 | 2010-03-20 21:27:04-0400(Sat,2010年3月20日)| 1行 将版本2.0更改合并到主干中 ------------------------------------------------------------------------ r5 |编程员2 | 2010-02-15 10:59:55-0500(2010年2月15日星期一)| 1行 将资产/images/tumblr_icon.png添加到trunk 其他程序员在其分支中的所有提交中输入的所有注释到底发生了什么?在合并过程中,这些车辆不会靠边停车吗?我是疯了还是忘了什么?

    ,现在我们有了
    svn log-g


    不,你没有疯。不幸的是,这就是它的工作原理

    最好在合并的提交消息中包含分支url和修订号,以便手动查找该分支的修订日志。 (当然,数据还在那里)

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

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

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

    了解是否有一个svn工具可以进行“重基”(如git或mercurial)可能会很有趣。这将为分支上的每个更改创建单独的提交。另一方面,可能单个提交太混乱了


    我能给出的最好建议是使用一个好的UI,比如Trac,这样可以很容易地检查修订历史,这样您就可以查看分支上发生了什么。

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

    TortoiseSVN在其底部有“包括合并修订”复选框“显示日志”对话框以包含提交到分支的注释。

    回答得好……如果您还想知道签入的文件以及可能的分支名称,请将-v[--verbose]选项与-g[--use merge history]捆绑在一起

    例如:

    svn log -vg
    

    输出将具有签入文件的完整路径(甚至是合并的分支),以及(来自“修订版\ url”)在合并后的修订版中添加文件的消息。

    非常好的信息,谢谢。后续问题:分支一旦合并到主干,是否应该删除它,因为它不再需要?还是应该永久保留?如果我删除分支,所有提交/修订数据都会随之删除?我会说,尽快删除分支sible(即当所有内容都已合并或过时时)以避免混乱/混乱。如果需要,您可以稍后恢复分支(通过创建新分支作为旧修订版的副本)。Subversion中的任何内容都不会被删除。因此,如果有人想查看已删除分支的提交,他们必须签出该分支,然后执行svn日志?或者他们可以直接使用svn日志执行某些操作吗?如果知道分支仍然存在时的修订号,您可以执行“svn日志”(您应该能够使用树干的日志找到合并提交)。这个解决方案不是“你能做的最好的”,它应该绝对地提到<代码> SvN-Log-G/<代码> 1。但是,应该注意的是,如果合并替换了文件,那么中间的修订不会出现在日志中。(为了识别被替换的文件,您将在<代码> Svlog日志中看到它是“R”——合并修订的冗长< /代码>。我疯狂地试图理解为什么中间的修订丢失了。
    svn log -vg