c++ - 忽略多行注释 git diff

标签 c++ c regex git libgit2

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

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

最佳答案

git diff -w 忽略空白差异。

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

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

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

关于c++ - 忽略多行注释 git diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533015/

相关文章:

C : In function, malloc 二维数组和参数的重复数组不起作用

c++ - 如何用 2 个 LinkedLls 重载 +=

c++ - 检查输入是C++中的数字还是字符串

c++ - 制作 JIT 编译器

php - 如果点和破折号最多出现两次,则进行正则表达式匹配

java - 正则表达式 - 仅当前一部分匹配时才匹配此部分

regex - 使用powershell和regexp替换整行文本?

c++ - 常规转换的内存损坏?调用了错误的函数

动态将字符串转换为浮点型

c++ - 为什么 dlmalloc 分配的 block 头包含 4 个字节的先前分配的 block