没有评论的Git diff

时间:2013-09-11 06:26:46

标签: ruby git

假设我在文件hello.rb中添加了两行。

# this is a comment
puts "hello world"

如果我git diff,则会显示我添加了两行。

我不希望git显示任何Ruby注释的行。我尝试使用git diff -G <regular expression>,但它对我不起作用。我如何做git diff以便它不会显示任何Ruby注释?

2 个答案:

答案 0 :(得分:3)

Git非常关心您提供给它的数据,并且非常努力地不丢失任何信息。对于Git来说,将某些行视为没有变化是没有意义的。如果有的话。

我认为这样做的唯一合理方法是后处理Git输出,正如Dogbert已在评论中所示。

答案 1 :(得分:0)

一种可能性是(ab)使用在创建差异之前 应用的git的textconv filters,因此您甚至可以转换二进制格式以获得易于理解的差异。

您可以使用任何从文件读取并写入stdout的脚本,例如,该脚本将剥离以#开头的所有行:

#!/bin/sh
grep -v "^\s*#" "$1" || test $? = 1

({test $? = 1更正了grep的退出代码,有关详细信息,请参见https://stackoverflow.com/a/49627999/4085967。)

对于C,有一个sed脚本可删除注释,我将在以下示例中使用该脚本。下载脚本:

cd ~/install
wget http://sed.sourceforge.net/grabbag/scripts/remccoms3.sed
chmod +x remccoms3.sed

将其添加到您的~/.gitconfig

[diff "strip-comments"]
         textconv=~/install/remccoms3.sed

将其添加到存储库的.gitattributes中以启用某些文件类型:

*.cpp diff=strip-comments
*.c diff=strip-comments
*.h diff=strip-comments

主要缺点是,默认情况下始终将其启用,您可以使用--no-textconv将其禁用。