Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
完整文件的svn diff?_Svn_Diff - Fatal编程技术网

完整文件的svn diff?

完整文件的svn diff?,svn,diff,Svn,Diff,给定:一个SVN存储库,其中有一个bin目录和一个script.pl在此bin中。以前的一些修订版本,bin和script.pl已在一次提交中添加到存储库中。此后,对script.pl进行了一些修订 需要:一个diff命令,它将返回script.pl从零到头的完整diff,即添加了所有行的diff 背景:此差异用于代码审查,用于提供给 问题:svn diff带有-rx:HEAD(X是script.pl的第一个修订版)会在第一个版本和HEAD之间产生差异,而-rx-1:HEAD告诉我script.

给定:一个SVN存储库,其中有一个
bin
目录和一个
script.pl
在此
bin
中。以前的一些修订版本,
bin
script.pl
已在一次提交中添加到存储库中。此后,对
script.pl
进行了一些修订

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

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

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


解决方案:从我的头顶:

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

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

等等,是否要在当前(HEAD)版本的script.pl和空文件之间进行区分?您不需要使用diff,因为diff只是当前script.pl的所有行,前面有加号。激动人心,不是吗

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

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

。。。或者是当地的同类产品,如果你被一个性能较差的系统困住了。

我也遇到了同样的问题,也没有找到解决办法


解决方法是对文件进行一些最新修订,然后“展开更改”显示完整的文件并允许在任何地方进行评论。

Subversion不会完全按照您的要求进行操作。您所能做的最好是在提交
bin/script.pl
时存在的最低级别目录的差异(可能是
bin
的父目录)。

没有临时文件:

echo "" | diff -u - script.pl

有点像黑客,但应该让你去

承诺一切

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

rm-rf
该目录,然后
svn up
将其返回

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

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

有些版本的SVN似乎允许您执行
SVN diff-r 0:HEAD file.txt
,但有些不允许。对于那些没有的,请使用以下方法:

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

这两种方法都适用于任何文件夹/文件/文件

看起来很有希望,但遗憾的是:svn:在修订版X-1Let中找不到
script.pl
的存储库位置。我们这样说:触摸和扩散是一种黑客行为。用Subversion pure做这些事情是这个问题的真正意图——特别是因为我想使用ReviewBoard,它使用Subversion进行区分。我想知道为什么Subversion不能产生一个适当的差异,并假设我是哑巴,但事实证明是Subversion而不是我有点功能不足:)但无论如何,谢谢你,我可能能够一起破解一些东西。另外,另一个问题是SVN替换关键字(例如$Date$,$Revision$,$Id$,等等)将在工作副本中展开,这是您不希望在差异中展开的。“svn diff”不会展开这些关键字,这是您希望的行为。必须是单个“svn diff”命令,或者您可以围绕它编写脚本吗?您会找“svn BURN”吗?这将显示该行何时添加到文件中。为什么不使用
/dev/null
?使用
diff-u/dev/null script.pl
?SVN替换关键字(例如$Date$、$Revision$、$Id$等)将在工作副本中展开,而“SVN diff”不会展开这些关键字,因此这是不同的