SVN跨两个不同的存储库进行区分

时间:2009-08-03 08:31:40

标签: svn diff

我有2个存储库。由于中继代码位于一个受保护的存储库中,我进行了结账,然后签入了另一个存储库(因为用户没有获得第一个受保护存储库的权限)。

现在的问题是两个存储库都已经处理过,我们希望最终将第二个不受保护的代码/分支与受保护的代码/分支合并。但是,这些会有冲突。

有没有办法找出2个存储库分支的差异? 此外,如果有空格更改,我该如何忽略它们?

9 个答案:

答案 0 :(得分:29)

svn diff --old=URL1@rev1 --new=URL2@rev2

示例:

svn diff --old=http://svn.whatever.com/trunk/myfile.txt@1234 --new=http://svn.whatever.com/branch/myfile.txt@5678

这允许您指定两个文件的分支和修订号。我知道它有效,因为我刚刚执行它。

答案 1 :(得分:25)

我不知道允许这样做的内置subversion功能,但您可以创建两个存储库的完整检出并使用命令行diff实用程序来比较两个工作副本:

diff -w -u -r -N WorkingCopy1 WorkingCopy2

-w忽略所有空格 -u使用统一的diff格式(如subversion) -r用于递归 -N让新文件出现在补丁中

这肯定不是最快的方法,但对于一次性流程可能是可以接受的。您还可以通过将输出重定向到文件diff -w -u -r -N WorkingCopy1 WorkingCopy2 > wc1-to-wc2.patch

来创建修补程序

如果你正在运行windows,可以在这里找到win32 build diff和patch:http://gnuwin32.sourceforge.net/packages/diffutils.htm

答案 2 :(得分:5)

执行此合并的最佳工具可能是git-svn。如果两个存储库的URL是$ URL1和$ URL2,请尝试:

$ git svn clone $URL1 svn1
$ git svn clone $URL2 svn2
$ cd svn1
$ git fetch ../svn2
$ git diff FETCH_HEAD master

要忽略空格更改,请使用git diff -w

答案 3 :(得分:3)

您可以使用kdiff3之类的工具来比较两个存储库中已检出的工作副本。 (只需将它指向两个目录,它就会递归地比较它们中的所有文件。)

答案 4 :(得分:1)

最简单的方法可能是检查两个分支并使用winmerge之类的工具(这将允许您忽略空格并进行多重比较)

答案 5 :(得分:1)

使用第一个存储库的工作副本中的以下内容将第二个存储库复制到第一个存储库中:

svn cp svn://url/to/the/second/repo branches/second_repo

签入并定期从新分支合并到您的主干。

此解释假定您使用最常见的svn存储库布局(branches /,tags /和/ trunk作为顶级目录),因此可能需要调整复制命令。

另请注意,SVN的某些GUI也支持此复制模式。在SmartSVN中,该命令称为“从URL复制”。

答案 6 :(得分:1)

以下有效,但速度很慢:

svn diff [url1] [url2]

答案 7 :(得分:1)

如果您使用的是Linux,那么您也可以使用“meld”工具......它可以很好地实现差异化,并且您可以轻松地进行合并...

答案 8 :(得分:0)

每次遇到这种情况时,我都会使用Meld。这是一个多平台的GUI比较工具。它可以比较文件与文件或目录与目录。在您的情况下,您可以将两个项目检出到单独的目录中,然后使用meld进行比较。您可以非常轻松地将更改(线条或块)从一个文件移动到另一个文件。

差异也很好!