如果匹配特定条件,则执行'diff / st'并忽略第一行

时间:2010-10-05 09:19:41

标签: regex mercurial diff cvs

在众所周知的开源项目的存储库中,所有文件都包含一个版本字符串,其时间戳为第一行:

<?php  // $Id: index.php,v 1.201.2.10 2009-04-25 21:18:24 stronk7 Exp $

即使我不明白为什么他们这样做 - 因为文件已经受版本控制 - 我不得不忍受这个。

主要的问题是,如果我尝试'st'或'diff'一个版本来了解从前一版本中发生了什么变化,那么存储库中包含的每个文件显然都被标记为已修改,并且差异变为难以理解和难以管理。

我想知道是否有办法在匹配正则表达式时忽略执行diff / st的第一行。

该项目属于cvs - cvs,是的,您已经正确阅读 - 并且包含在更大的mercurial存储库中。

2 个答案:

答案 0 :(得分:2)

我不知道cvs,但是对于hg,你可以使用捆绑的extdiff extension的任何外部差异工具,任何现代工具都应该能够让你忽略符合某些模式的差异。

我发誓Beyond Compare,它允许任意语法定义。

kdiff3有preprocessor commands,您可以通过它来管道输入。

答案 1 :(得分:1)

如果您尝试

man diff
你会找到

--ignore-matching-lines=RE Ignore changes whose lines all match RE.

在网络上搜索“忽略匹配行”会给出示例:

  

diff --unified --recursive --new-file    - 忽略匹配线= '[$]作者。 [$]'   --ignore-matching-lines ='[$] Date。 [$]'...

(http://www.cygwin.com/ml/cygwin-apps/2005-01/msg00000.html)

这样试试:

diff --ignore-matching-lines='[<][?]php  [/][/] [$]Id:'