忽略多行注释git diff

时间:2015-02-16 00:44:26

标签: c++ c regex git libgit2

我试图找到只有源代码发生变化的C / C ++源代码的重大差异。我知道你可以使用git diff -G<regex>,但在可以运行的正则表达式中似乎非常有限。例如,它似乎没有提供一种方法来忽略C / C ++中的多行注释。

在运行差异之前,在git或者libgit2中是否有任何方法可以忽略注释(包括多行),空格等?或者一种确定diff输出中的一行是否是评论的方法?

2 个答案:

答案 0 :(得分:2)

git diff -w忽略空白差异。

您不能忽略多行注释,因为git是一个版本控制工具,而不是语言相关的解释器。它不知道你的代码是C ++。它不解析文件的语义,因此无法解释什么是注释,什么不是。特别是,它依赖于diff(或配置的difftool)来比较文本文件,并且它需要逐行比较。

我同意@ andrew-c你真正要求的是比较没有评论的两段代码。更具体的帮助,您要求比较所有多行注释已变为空行的代码行。您保留空行,以便在正常副本上引用正确的行号。

因此,您可以手动将两个代码状态转换为空白多行注释...或者您可能会考虑构建自己的diff包装器,为您进行剥离。但后者不值得付出努力。

答案 1 :(得分:0)

您可以使用git属性和diff过滤器来实现这一点,如Viewing git filters output when using meld as a diff tool中所述,以调用sed脚本,但如果您希望它能够处理所有情况,例如字符串文字内的注释分隔符等,则它本身非常复杂