鉴于: SVN存储库,其中的bin
目录以及script.pl
内的bin
。在一些修订之前,bin
和script.pl
已在一次提交中添加到存储库中。从那时起,一些修订已应用于script.pl
。
需要:一个diff命令,它会将script.pl
的完整差异从零返回到HEAD,即添加了所有行的差异。
背景:代码审核需要此差异,以便提供给ReviewBoard
问题: svn diff
-r X:HEAD
(X
是script.pl
的第一个修订版)会在第一个版本和HEAD之间产生差异-r X-1:HEAD
告诉我修订版script.pl
中的文件X-1
未知,这实际上是正确的。但是,我找不到一个合适的解决方案,其中包括来自空文件的差异。我也无法区分bin
目录,因为它已添加到与script.pl
相同的提交中
解决方案: ?
答案 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是。