SVN - 根据签出时间查看分支中的更改

时间:2013-08-13 20:20:14

标签: svn

我希望看到与分支相关的修改。我可以很好地将它与主干的当前状态进行比较,但主干不断更新,所以我看到范围之外的变化就是那个分支。如何确定分支所基于的主干版本然后执行diff(我喜欢使用BeyondCompare,因此我需要获取两组文件)以查看修改。这是一项简单的任务吗?我将如何执行此专长?

谢谢和亲切的问候, 标记

2 个答案:

答案 0 :(得分:2)

你想要svn log命令的--stop-on-copy选项,这将打印出你的分支上的所有更改,直到它到达它所分支的第一个修订版。

svn log --verbose --stop-on-copy .

svn diff会显示更改 - 您可以通过设置right command in the config将其设置为自动超出比较。

答案 1 :(得分:2)

svn log将显示创建分支的时间以及从中复制分支的位置(即,如果您按照下面的说明执行了正确的操作)。我喜欢使用这个命令:

$ svn log -v -r1:HEAD --stop-on-copy $REPO/branches/$branch_name | head

这将列出从最小到最旧的分支,这意味着您将在顶部看到第一个修订,而不是等待整个日志打印。 --stop-on-copy将打印出分支历史记录的开头,而不是从复制的分支中跟踪历史记录。 -r1:HEAD以相反的顺序打印出来,-v打印出可以回答您问题的复制信息。 head的管道只是将输出限制在前10行,绰绰有余:

$ svn log -v -r1:HEAD --stopy-on-copy $REPO/branches/1.3 | head
------------------------------------------------------------------------
r160215 | dweintraub | 2013-04-23 13:42:54 -0400 (Tue, 23 Apr 2013) | 2 lines
Changed paths:
   A /branches/1.3 (from /trunk:160214)

Created branch from Trunk

------------------------------------------------------------------------
r160325 | rrandive | 2013-04-25 08:03:14 -0400 (Thu, 25 Apr 2013) | 1 line

从这里,您可以看到1.3分支上的第一个版本是修订版160,215,并且这是从trunk的修订版160,214中复制的。这将为您提供比较的基础。我知道有些人制作分支点标签,然后从分支点标签分支:

$ svn cp $REPO/trunk $REPO/branch_point/2.4
$ svn cp REPO/branch_point/2.4 $REPO/branches/2.4

这为他们提供了一种标准方法来比较分支点上分支与主干的所有变化:

$ svn diff --summarize $REPO/branch_point/2.4 $REPO/trunk  #Changes on trunk since branch
$ svn diff --summarize $REPO/branch_point/2.4 REPO/branches/2.4 #Changes on the branch

这样,您无需继续返回svn log来确定更改列表。请注意,trunkbranchestags仅仅是惯例。您可以定义自己的,也可以添加它们。例如,您可能有jenkins_builds标记您的Jenkins构建。想象一下,如果Jenkins在成功构建之后做到了这一点:

$ svn cp $REPO/trunk $REPO/jenkins_build/$BUILD_NUMBER

这使得在构建之间很容易区分:

$ svn diff $REPO/jenkins_build/12 $REPO/jenkins_build/56

或者,标记特定的Jenkins构建版本:

$ svn cp $REPO/jenkins_build/33 $REPO/tags/2.3