Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 忽略多行注释git diff_C++_C_Regex_Git_Libgit2 - Fatal编程技术网

C++ 忽略多行注释git diff

C++ 忽略多行注释git diff,c++,c,regex,git,libgit2,C++,C,Regex,Git,Libgit2,我试图找出C/C++源代码中只有源代码更改的显著差异。我知道您可以使用git diff-G,但它似乎对可以运行的正则表达式的种类非常有限。例如,它似乎没有提供一种在C/C++中忽略多行注释的方法 在运行diff之前,git或者libgit2中是否有任何方法可以忽略注释(包括多行)、空格等?或者一种确定diff输出中的一行是否为注释的方法?git diff-w忽略空格差异 您不能忽略多行注释,因为git是一个版本控制工具,而不是依赖于语言的解释器。它不知道你的代码是C++。它不解析文件的语义,因此

我试图找出C/C++源代码中只有源代码更改的显著差异。我知道您可以使用
git diff-G
,但它似乎对可以运行的正则表达式的种类非常有限。例如,它似乎没有提供一种在C/C++中忽略多行注释的方法


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

git diff-w
忽略空格差异

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

我同意@andrew-c的说法,你真正想做的是比较两段代码,不加注释。更具体地说,您需要比较所有多行注释都变成空行的代码行。您保留了空白行,以便在正确的副本上引用正确的行号。
因此,您可以手动将这两种代码状态转换为空白多行注释。。。或者,您可以考虑构建自己的diff包装器,为您进行剥离。但后者可能不值得努力。

您可以使用中所述的git属性和差异过滤器来实现这一点,以调用sed脚本,但是如果您希望它处理所有情况,如字符串文本中的注释分隔符等,它本身就相当复杂。

值得怀疑。如果你真的坚持,你可以预处理这两个文件,然后区分输出。你用什么
regex
?@AndrewC尝试过什么git diff命令?这正是我害怕的。目前,我们只是通过一个工具为每个版本提供git cat文件的输出,但由于这两个文件都是巨大的,所以我们在进行大型回购时会碰到堆的顶部。我正在尝试在我们的工具中使用libgit2来提高内存和时间效率。可以使用gittrubutes来更改用于特定文件的diff程序(通常是通过文件扩展名),但似乎没有什么可以阻止您为“*”定义“外部diff驱动程序”files.may可以帮助您使用diff的图形用户界面吗?