忽略多行注释git diff

one*_*nch 6 c c++ regex git libgit2

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

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

Joe*_*ger 2

git diff -w忽略空白差异。

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

我同意@andrew-c 的观点,你真正要求的是比较两段没有注释的代码。更具体地说,您要求比较所有多行注释已变成空行的代码行。您将空白行保留在那里,以便在普通副本上引用正确的行号。

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