忽略多行注释 git diff

6
我正在尝试寻找在仅源代码更改的情况下C/C++源代码中的显着差异。我知道您可以使用git diff -G<regex>,但它似乎非常限制可以运行的正则表达式种类。例如,在C/C++中,它似乎没有提供一种忽略多行注释的方法。
在运行diff之前,在git或者最好是libgit2中是否有一种忽略注释(包括多行注释)、空格等的方法?或者有一种确定diff输出中是否为注释的行的方法吗?

3
怀疑。如果你真的很坚持,你可以预处理这两个文件然后进行比较。 - Andrew C
你尝试过哪些带有什么“正则表达式”的git diff命令? - jub0bs
@AndrewC 这正是我所担心的。目前我们只是通过工具来提供git cat-file的输出,但由于两个文件都很大,因此我们在处理大型存储库时会遇到堆栈顶端问题。我正在尝试找到一种使用libgit2来使这个过程更加节省内存和时间的方法。 - onetwopunch
可以使用gitattributes来更改特定文件(通常是按文件扩展名)使用的diff程序,但似乎没有什么阻止您为“*”文件定义一个“外部diff驱动程序”。 - user3710044
使用tortoiseGit,你可以获得一个图形化的用户界面来进行diff操作。 - Martin
至少忽略空格很容易:git diff有几个“--ignore...”选项,可以忽略不同上下文中的空格。 - bjhend
2个回答

2

git diff -w命令可以忽略空格差异。

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

我同意@andrew-c的观点,你真正想做的是比较两个没有注释的代码片段。更具体地说,你要比较的是所有多行注释已经转换为空行的代码行。你保留空白行是为了在普通副本上引用正确的行号。

因此,你可以手动将两个代码状态转换为空白的多行注释……或者尝试构建自己的差异包装器来进行剥离。但后一种方法可能得不偿失。


0

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