6

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

# this is a comment
puts "hello world"

如果我这样做git diff,它将显示我添加了两行。

我不希望 git 显示任何作为 Ruby 注释的行。我尝试使用git diff -G <regular expression>,但它对我不起作用。我该怎么做git diff才能不显示任何 Ruby 注释?

4

2 回答 2

5

一种可能性是(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.

于 2018-10-05T16:21:25.157 回答
3

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

我认为这样做的唯一合理方法是对 Git 输出进行后处理,正如 Dogbert 在他的评论中已经表明的那样。

于 2013-09-13T14:16:16.853 回答