svn diff获取完整文件?

时间:2009-08-21 12:56:48

标签: svn diff

鉴于: SVN存储库,其中的bin目录以及script.pl内的bin。在一些修订之前,binscript.pl已在一次提交中添加到存储库中。从那时起,一些修订已应用于script.pl

需要:一个diff命令,它会将script.pl的完整差异从零返回到HEAD,即添加了所有行的差异。

背景:代码审核需要此差异,以便提供给ReviewBoard

问题: svn diff -r X:HEADXscript.pl的第一个修订版)会在第一个版本和HEAD之间产生差异-r X-1:HEAD告诉我修订版script.pl中的文件X-1未知,这实际上是正确的。但是,我找不到一个合适的解决方案,其中包括来自空文件的差异。我也无法区分bin目录,因为它已添加到与script.pl相同的提交中

解决方案:

8 个答案:

答案 0 :(得分:6)

没有临时文件:

echo "" | diff -u - script.pl

答案 1 :(得分:2)

SVN的某些版本似乎允许您svn diff -r 0:HEAD file.txt,但有些版本没有。对于那些不这样做的人,请使用以下内容:

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

这两个都适用于任何文件夹/文件/文件!

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

等等,你想在script.pl的当前(HEAD)版本和空文件之间进行差异吗?你不需要 diff ,因为diff只是当前script.pl的所有行,前面有加号。令人兴奋,没有?

如果您确实需要 diff 形式,为什么不这样做呢?

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

...或当地的等效物,如果你遇到功能较弱的系统。

答案 4 :(得分:0)

我遇到了同样的问题,也找不到解决方案。

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

答案 5 :(得分:0)

Subversion不会完全符合您的要求。您可以做的最好的是提交bin/script.pl时存在的最低级别目录的差异(可能是bin的父级)。

答案 6 :(得分: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它回来了。

答案 7 :(得分:-3)

从头到尾:

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

随着时间的推移文件名不是唯一键,但文件名@ revision是。