完整文件的svn diff?

11

给定: 一个SVN存储库,其中包含一个bin目录和一个位于该目录中的script.pl文件。几个版本之前,binscript.pl被一起添加到存储库中的一个提交中。此后,对script.pl进行了一些修订。

需要: 一条差异命令,它将返回从零到HEAD的script.pl的完整差异,即包含所有已添加行的差异。

背景: 此差异用于代码审查,并提供给ReviewBoard

问题: 使用-r X:HEAD(其中Xscript.pl的第一个版本)的svn diff会生成第一个版本和HEAD之间的差异,而-r X-1:HEAD则告诉我文件script.pl在版本X-1中不存在,这实际上是正确的。但是,我找不到一个适当的解决方案,可以包括空文件的差异。我也不能对bin目录进行差异比较,因为它与script.pl在同一次提交中添加。

解决方案: ?


必须是一个单独的“svn diff”命令,还是可以通过脚本实现? - wowest
"svn blame" 是你正在寻找的东西吗?这将会显示出该行代码是何时被添加到文件中的。 - David W.
8个回答

6

没有临时文件:

echo "" | diff -u - script.pl

1
为什么不使用 /dev/null?用 diff -u /dev/null script.pl - Benoit
SVN替换关键字(例如$Date$,$Revision$,$Id$等)将在工作副本中展开,而“svn diff”不会展开这些关键字,因此这不是相同的。 - user102008

2

某些版本的SVN似乎可以使用svn diff -r 0:HEAD file.txt,但有些则不行。如果不行,请使用以下命令:

svn diff --old=/path/to/root/of/repo@1 --new=/path/to/file.txt

两种方法都适用于任何文件夹/文件/多个文件!


1
这是我在这种情况下使用的黑客技巧:

cp file1 file2
svn add file2
svn diff file2 > file1.diff
svn rm --force file2

0

有点取巧,但应该能让你开始...

提交所有更改

for file in find . -name "*.*" | grep -v .svn; do echo "" > $file; done
svn diff | sed -e 's/^-/+/g' > diffs.txt

rm -rf 删除该目录,然后 svn up 恢复它。


0

我曾经遇到同样的问题,但是没有找到解决方案。

解决方法是生成文件最近几个版本的差异,然后“展开更改”会显示完整的文件,并允许在任何地方进行评论。


0

等一下,你想要当前(HEAD)版本的script.pl和空文件之间的差异吗?你不需要一个diff,因为diff只会显示当前script.pl的所有行,并在前面加上加号。很激动人心,不是吗?

如果你真的需要它以diff形式,为什么不这样做呢?

$ touch EMPTYFILE  # creates a new, empty file
$ diff -u EMPTYFILE script.pl > script.pl.diff

... 或当地等价物,如果你被困在一个功能较弱的系统中。


2
这样说吧:触摸和差异是一种hack。使用纯Subversion进行此操作是问题的实际意图 - 特别是因为我想使用ReviewBoard,它使用Subversion自己制作差异。我想知道为什么Subversion无法生成适当的差异,并认为我很蠢,但事实证明是Subversion而不是我有点不够功能强大 :)但无论如何,还是谢谢,我可能能够将某些东西组合在一起。 - Nikolai Prokoschenko
1
此外,这个方法还有一个问题,就是 SVN 的替换关键字(例如 $Date$、$Revision$、$Id$ 等)会在工作副本中被展开,而你不希望在 diff 中看到它们。"svn diff" 不会展开这些关键字,这正是你想要的行为。 - user102008

0

Subversion无法完全满足您的需求。最好的方法是对提交bin/script.pl时存在的最低级别目录进行差异比较(可能是bin的父目录)。


-3

就我个人而言:

svn diff -r X-1:HEAD FILENAME@X

文件名并非随时间唯一的键,但是文件名@修订版是。


看起来很有前途,但可惜:svn:在修订版X-1中找不到“script.pl”的存储库位置 - Nikolai Prokoschenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接