【问题标题】:Doing a 'diff/st' and ignoring the first line if it matches a specific criterion执行 'diff/st' 并忽略第一行,如果它符合特定标准
【发布时间】:2011-04-21 05:04:46
【问题描述】:

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

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

即使我真的不明白他们为什么这样做——因为文件已经在版本控制之下——我也必须忍受这个。

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

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

该项目在 cvs 下 - cvs,是的,你没看错 - 并包含在一个更大的 mercurial 存储库中。

【问题讨论】:

标签: regex mercurial diff cvs


【解决方案1】:

我不了解 cvs,但是使用 hg,您可以使用任何外部 diff 工具和捆绑的 extdiff extension,并且任何现代工具都应该能够让您忽略匹配某些模式的 diff。

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

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

【讨论】:

  • 再次为 Beyond Compare 投票。另外,我正在尝试在 VSS 中运行您的 PianoActor 代码,但它的数据文件似乎已损坏。通过 camilleg@camille-g.com 与我联系?
【解决方案2】:

如果你尝试

man diff

你会发现

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

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

diff --unified --recursive --new-file --ignore-matching-lines='[$]Author.[$]' --ignore-matching-lines='[$]Date.[$]' ...

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

因此尝试:

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

【讨论】:

  • (你也可以做一个 diff 然后 grep -v "[
  • 抱歉,问题中可能不清楚我需要在 hg/cvs 上下文中执行此操作。使用 UNIX 差异可能对我没有帮助:(
  • 当然,但请参阅前面的答案以了解如何设置外部差异命令 - 包括 this 答案中提供的参数。在这两个答案之间,您有一个完整的解决方案。
  • 感谢史蒂夫的评论,这对我也有一些帮助:D
猜你喜欢
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2021-06-22
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多