【问题标题】:Svn diff to output all lines from filessvn diff 输出文件中的所有行
【发布时间】:2011-12-20 11:38:40
【问题描述】:

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

顺便说一句,我在使用 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 配置设置?我知道我可以为 svn 使用外部 diff 工具,但是哪一个给了我想要的输出?我想尽量避免安装任何差异工具,因为我在公司网络上。

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

提前感谢您的帮助! =)

【问题讨论】:

  • 如果给出的答案有帮助,您应该使用向上箭头投票:)。

标签: svn shell unix merge diff


【解决方案1】:

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

首先,创建一个 diff 脚本,该脚本将适当地使用从 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

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

【讨论】:

  • 非常感谢,我有一种有趣的感觉,这将是一件简单的事情!然而我就是找不到。 =) 你为我节省了很多时间 Kaleb!
【解决方案2】:

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

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

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

【讨论】:

  • 也谢谢你,这个答案正是我需要的。
  • 不错的一个衬里,但如果您想从两个文件中返回所有行,“30”就不是上下文大小的好例子。许多文件包含超过 30 行。我建议改用 1000000000 !很少有文件包含超过 10 亿行。
  • @SamWatkins 我进行了编辑以澄清他的意思
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多