Svn diff输出文件中所有行的差异

14

我已经搜索了一段时间,仍然找不到一个简单的解决方案来解决我的问题。我想在两个文件版本之间产生差异,但是我希望输出显示文件的所有行。

顺便说一句,我正在使用svn 1.6.17,操作系统是AIX 5.3。

示例:比较我的文件“test_file”的第21个版本和第22个版本之间的差异。

% svn cat -r21 test_file 
My Test File

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9

% svn cat -r22 test_file
My Test File

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9

added after 1
added after 2
added after 3

% svn diff -r21:22 test_file
Index: test_file
===================================================================
--- test_file   (revision 21)
+++ test_file   (revision 22)
@@ -9,3 +9,7 @@
 line 7
 line 8
 line 9
+
+added after 1
+added after 2
+added after 3
现在这个输出显示了两个版本之间的差异,但并不是所有行都在那里,它只显示前3行。
所以我的问题是如何在输出中得到这些行?是否有一些svn diff配置设置?我知道我可以使用外部diff工具来针对svn,但哪一个工具可以给出我想要的输出呢?因为我在一个公司网络中,所以我想尽量避免安装任何diff工具。
另外一点:到目前为止,“sdiff”生成的带有2列的文件似乎是最接近我的答案,但我更想要一个单列的文件,用“+”和“-”表示添加/删除的行。
提前感谢任何帮助! =)

如果所给的答案有帮助,您应该使用上箭头投票:)。 - Kaleb Pederson
2个回答

17

是的,你可以使用外部的diff来完成这个任务。我通常通过下面的命令来实现:

svn diff --diff-cmd diff -x "-U30" 

这里,-U30 是上下文大小的统一值。你应该使它足够大,以包含文件的所有行。例如,如果你最长的文件有1000行,你会使用 -U1000


1
谢谢你,这个答案正是我所需要的。 - kickbackjack
4
简短的一句话,但如果您想返回两个文件中的所有行,则“ 30”不是上下文大小的好示例。许多文件包含超过30行。我建议改用1000000000!少数文件包含超过10亿行。 - Sam Watkins
1
@SamWatkins,我进行了编辑,澄清了他的意思。 - villapx

6
也许以下内容接近您想要的:
首先,创建一个差异脚本,将适当地使用从svn接收到的参数:
#!/bin/sh
# file : /usr/local/bin/mydiff

# assumes less that 10,000 lines per file
/usr/bin/diff -U10000 $6 $7

然后使用svn进行差异比较:

svn diff --diff-cmd /usr/local/bin/mydiff

如果您想更紧密地自定义diff输出,您只需要修改您的 mydiff脚本。


非常感谢,我有一种奇怪的感觉,这一定是件简单的事情!但我就是找不到它。 =)Kaleb,你为我节省了很多时间! - kickbackjack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接