1

我想查看与分支关联的修改。我可以很好地将它与主干的当前状态进行比较,但是主干会不断更新,所以我看到的只是那个分支范围之外的变化。如何确定分支基于哪个版本的主干然后做一个差异(我喜欢使用 BeyondCompare,所以我需要获取两组文件)以查看修改。这是一项简单的任务吗?我将如何完成这项壮举?

谢谢和亲切的问候,马克

4

2 回答 2

2

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

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

svn diff 将向您显示更改 - 您可以通过在配置中设置正确的命令将其设置为自动使用无法比较。

于 2013-08-13T21:18:56.443 回答
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,这是从主干的修订版 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找出更改列表。请记住trunk,branchestags只是约定俗成的。您可以定义自己的,或添加到它们。例如,您可能有一个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
于 2013-08-13T21:47:42.610 回答