Svn diff输出文件中的所有行

kic*_*ack 12 unix svn shell diff merge

我一直在寻找一段时间,仍然无法找到解决这个问题的简单方法.我想在文件的两个修订版之间产生差异,我希望输出显示我的文件的所有行.

顺便说一句,我使用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
Run Code Online (Sandbox Code Playgroud)

现在这个输出显示了两个版本中的差异,但并不是所有文件的行都存在,它只显示前三个.

所以我的问题是如何在输出中获得这些线?

是否有某种svn diff配置设置?我知道我可以使用外部差异工具svn,但哪一个给我输出我想要的?我想尝试避免安装任何差异工具,因为我在公司网络上.

补充一点:到目前为止,生成2列的'sdiff'似乎是我能得到的最接近的答案,但理想情况下我想要一个带有'+'和' - '的圆柱文件显示添加/删除的行

在此先感谢您的帮助!=)

ks1*_*322 16

是的,您可以使用外部diff来完成此任务.我通常通过这样的命令来做:

svn diff --diff-cmd diff -x "-U30" 
Run Code Online (Sandbox Code Playgroud)

这里-U30是统一的上下文大小.你应该把它做得足够大,以包含文件中的所有行.例如,如果您的最长文件有1000行,则使用-U1000.

  • 很好的一个班轮,但如果你想从两个文件中返回所有行,"30"不是上下文大小的好例子.许多文件包含超过30行.我建议用1000000000代替!很少有文件包含超过10亿行. (3认同)

Kal*_*son 6

也许以下内容接近你想要的:

首先,创建一个diff脚本,它将使用从svn收到的args:

#!/bin/sh
# file : /usr/local/bin/mydiff

# assumes less that 10,000 lines per file
/usr/bin/diff -U10000 $6 $7
Run Code Online (Sandbox Code Playgroud)

然后使用svn进行diff:

svn diff --diff-cmd /usr/local/bin/mydiff
Run Code Online (Sandbox Code Playgroud)

如果您想更密切地自定义diff输出,只需修改mydiff脚本即可.