svn diff 获取完整文件?
Posted
技术标签:
【中文标题】svn diff 获取完整文件?【英文标题】:svn diff for a complete file? 【发布时间】:2009-08-21 12:56:48 【问题描述】:给定:一个 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
告诉我文件 @ 987654334@在修订版X-1
中是未知的,实际上是正确的。但是,我找不到合适的解决方案,其中包括来自空文件的差异。我也无法区分bin
目录,因为它已添加到与script.pl
相同的提交中
解决方案: ?
【问题讨论】:
必须是一个单一的 'svn diff' 命令,或者你可以围绕它编写脚本吗? “svn blame”会是您正在寻找的东西吗?这将向您显示该确切行何时添加到文件中。 【参考方案1】:没有临时文件:
echo "" | diff -u - script.pl
【讨论】:
为什么不使用/dev/null
? diff -u /dev/null script.pl
?
SVN 替换关键字(例如 $Date$、$Revision$、$Id$ 等)将在工作副本中展开,而“svn diff”不会展开这些关键字,所以这不一样【参考方案2】:
某些版本的 SVN 似乎允许您执行 svn diff -r 0:HEAD file.txt
,但有些版本不允许。对于那些不这样做的人,请使用以下内容:
svn diff --old=/path/to/root/of/repo@1 --new=/path/to/file.txt
这两种方法都适用于任何文件夹/文件/文件!
【讨论】:
【参考方案3】:这是我在这种情况下使用的技巧:
cp file1 file2
svn add file2
svn diff file2 > file1.diff
svn rm --force file2
【讨论】:
【参考方案4】:等等,你想要当前 (HEAD) 版本的 script.pl 和空文件之间的差异吗?您不需要 diff ,因为差异只是当前 script.pl 的所有行,前面带有加号。很刺激,不是吗?
如果你真的需要 diff 形式的,为什么不这样做呢?
$ touch EMPTYFILE # creates a new, empty file
$ diff -u EMPTYFILE script.pl > script.pl.diff
... 或本地等效系统,如果您被功能较弱的系统卡住。
【讨论】:
让我们这样说:触摸和差异是一种技巧。用 Subversion pure 做这些事情是这个问题的实际意图——尤其是因为我想使用 ReviewBoard,它使用 Subversion 自己制作差异。我想知道为什么 Subversion 无法产生正确的差异并假设我很愚蠢,但事实证明是 Subversion 而不是我的功能有点不足:) 但无论如何,谢谢,我也许可以一起破解一些东西。 另外,另一个问题是 SVN 替换关键字(例如 $Date$、$Revision$、$Id$ 等)将在工作副本中扩展,而您不会想要一个差异。 “svn diff”不会扩展这些关键字,这就是您想要的行为。【参考方案5】:我遇到了同样的问题,也没有找到解决方案。
解决方法是生成文件的几个最近修订版本的差异,然后“扩展更改”向您显示完整的文件并允许在任何地方发表评论。
【讨论】:
【参考方案6】:Subversion 不会完全按照您的意愿行事。您可以做的最好的事情是与提交bin/script.pl
时存在的最低级别目录(大概是bin
的父级)的差异。
【讨论】:
【参考方案7】:有点破解,但应该让你去......
提交所有内容
for file in find . -name "*.*" | grep -v .svn; do echo "" > $file; done
svn diff | sed -e 's/^-/+/g' > diffs.txt
rm -rf
那个目录和svn up
它回来。
【讨论】:
【参考方案8】:从我的头顶:
svn diff -r X-1:HEAD FILENAME@X
随着时间的推移,文件名不是唯一键,但 filename@revision 是。
【讨论】:
看起来很有希望,但遗憾的是:svn: Unable to find repository location forscript.pl
in revision X-1以上是关于svn diff 获取完整文件?的主要内容,如果未能解决你的问题,请参考以下文章
当使用 svn cp 或 svn mv 时,如何使 svn diff 生成将应用补丁的文件?