完整文件的svn diff?
给定:一个SVN存储库,其中有一个完整文件的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.
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”不会展开这些关键字,因此这是不同的