如何配置BeyondCompare忽略SCM替换的注释文本?

20

我有一些文本序列,它们被SCM(在我这种情况下是Perforce)替换掉了。

我想配置BeyondCompare,将这些序列视为不重要的差异,以便在比较文件时忽略它们。

在我的情况下,这是针对Python源代码文件的,这些序列看起来像是:

# $Id: //depot/.../filename#7 $
# $DateTime: 2010/09/01 10:45:29 $
# $Author: username $
# $Change: 1234 $
有时这些序列可能出现在注释之外,但即使在这种情况下,我也希望能够忽略这些行,因为它们实际上并没有被更改。

以前有一个“按规则比较”的选项,您可以说注释是不重要的差异,但我刚刚检查了我的版本(3.1.9),似乎已经删除了“按规则比较”?至少,我找不到它了。 您使用的是哪个版本? - James
2个回答

16

你需要定义一个新的语法元素(假设我们称之为“SCM”),并将其标记为不重要的(在这里查看教程;选择“基本”并确保选中“正则表达式”)。

如果我正确理解您的示例,则该语法元素应为:

^.*\$(Id|DateTime|Author|Change):.*$

这将忽略任何包含$Id:$DateTime:等内容的行。

如果你只想忽略以# $...开头的行,请使用

^\s*#s*\$(Id|DateTime|Author|Change):.*$

如果你只想忽略$之间的内容(并将其他所有内容视为重要),请使用:

\$[^$\r\n]*\$
或者
\$(Id|DateTime|Author|Change)[^$\r\n]*\$

取决于您是否关心这些关键字。


我知道出错的概率很小,但我们难道不应该只忽略这些行中$符号之间的文本吗? - sorin
在你的例子中,行只包含在 $ 符号之间的文本,前面有一个注释 #,你说这并不总是存在(虽然我几乎无法想象)。你能提供更多的例子吗? - Tim Pietzcker
好的。我已经编辑了答案。希望现在我理解了您的要求。 - Tim Pietzcker
我无法让它工作。似乎在自定义语法之前,注释语法规则就已经捕捉到了它。是否有可能将注释中的SCM元素更改标记为不重要,而一般情况下注释更改仍然很重要? - Tor Klingberg

5
Beyond Compare的解析器目前(v3/v4)不支持嵌套元素,因此如果文本已被分类为注释、字符串等,则文件格式语法无法用于将SCM序列标记为特定文件类型中不重要的内容。
Beyond Compare 4.0增加了对整个比较标记任意文本为不重要的支持,与语法分开。
1.加载您感兴趣的文件。 2.单击“会话设置”按钮(即带有裁判图标的“规则”)或使用“会话->会话设置”菜单项。 3.切换到“重要性”选项卡。 4.在“不重要的文本”列表底部单击“+”按钮。 5.将纯文本或正则表达式添加到“要查找的文本”编辑中,并在必要时选中“正则表达式”复选框。在这种情况下,正则表达式为: $(Id|DateTime|Author|Change):.*$ 6.单击“确定”。 7.默认情况下,这些更改仅影响当前比较。您可以从Session Settings对话框底部的组合框将其更改为“仅用于此视图”,以使其影响所有文件类型的所有未来比较。

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