如何在颠覆中比较分支与主干?

时间:2011-01-24 17:48:38

标签: svn

在Subversion中,我使用svn copy从主干创建了一个分支。根据{{​​3}},“这是在您的存储库中”标记“修订版的最简单方法 - 只需将该修订版(通常为HEAD)复制到您的标记目录中。”

svn copy file:////svn/projectX/trunk file:///svn/projectX/branches/stefanl

然后,我对stefanl分支进行了修改。我想将我的更改提交到主干,但在我这样做之前,我希望看到变化的差异。

如何将'stefanl'分支与'trunk'分支区分开来?我试过svn diff,但它没有提供太多信息:

% svn diff file:////svn/projectX/trunk file:///svn/projectX/branches/stefanl
Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
   Reverse-merged /trunk:r1699-1870

6 个答案:

答案 0 :(得分:57)

添加到之前的答案(如果在Windows上使用Tortoise SVN):

  • 右键单击任何文件夹。从上下文菜单中,选择 TortoiseSVN - >的库浏览器即可。
  • 网址框中输入您的回购地址。
  • 导航到要比较的第一个文件夹。右键单击并选择标记以进行比较
  • 导航到第二个文件夹。右键单击并选择比较网址

答案 1 :(得分:8)

您可以使用Unix diff来比较目录。

查找丢失的文件:

diff -r svn/projectX/trunk svn/projectX/branches/stefanl | grep -i only

要查找文件之间的差异:

diff -ru svn/projectX/trunk svn/projectX/branches/stefanl

我有同样的问题,并在邮件主题中找到了建议: http://svn.haxx.se/users/archive-2003-08/0538.shtml

答案 2 :(得分:3)

基于其他答案和一些研究,我写了一个自动执行的脚本。

#!/bin/bash
url=$(svn info | grep ^URL: | sed -e 's,^URL: ,,' )
root=$(svn info | grep '^Repository Root:' | sed -e 's,.*Root: ,,' )
trunk=$root/trunk
if [[ -n "$1" && ! -e "$1" ]]
then
    echo "What? svn diff \"$1\"? really?"
    exit
fi
svn diff $url/$1 $trunk/$1 > trunk.diff

你在分支下运行它。您可以传递路径(目录或文件),它将按预期工作。如果没有那么它只会区分分支和主干。

答案 3 :(得分:1)

感谢信息人员,我会添加一些东西来提高diff结果的可读性。如果您使用:  svn diff svn:// url:9090 / branches / PRD_0002 svn:// url:9090 / branches / TST_0003> svn_diff_filename.txt

您还可以使用: findstr“索引:”C:\ path \ svn_diff_filename.txt> svn_diff_file_list.txt

这将为您提供可读的文件列表,这些文件有任何差异。

此致 KRA。

答案 4 :(得分:1)

如果您正在使用带有eclipse的Subversive插件(其他ide?)切换到存储库浏览透视图。 在SVN Repositories面板中,右键单击任何项​​目,然后选择“Compare ...”选项。 它应该是直观的。

答案 5 :(得分:1)

使用:

 svn diff ^/trunkUrl/fileName ^/branchUrl/fileName

这将为您提供分支和主干文件之间的区别。