假设我在文件中添加了两行hello.rb
。
# this is a comment
puts "hello world"
如果我这样做git diff
,它将显示我添加了两行。
我不希望 git 显示任何作为 Ruby 注释的行。我尝试使用git diff -G <regular expression>
,但它对我不起作用。我该怎么做git diff
才能不显示任何 Ruby 注释?
一种可能性是(ab)使用 git 的textconv 过滤器,这些过滤器在创建差异之前应用,因此您甚至可以转换二进制格式以获得人类可读的差异。
您可以使用任何从文件读取并写入标准输出的脚本,例如删除所有以 开头的行的脚本#
:
#!/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
.
Git 非常关心您提供给它的数据,并且非常努力地不丢失任何信息。对于 Git,将某些行视为没有更改是没有意义的。
我认为这样做的唯一合理方法是对 Git 输出进行后处理,正如 Dogbert 在他的评论中已经表明的那样。