假设我在文件中添加了两行hello.rb.
# this is a comment
puts "hello world"
Run Code Online (Sandbox Code Playgroud)
如果我这样做git diff,它会显示我添加了两行.
我不希望git显示任何Ruby注释的行.我试过用git diff -G <regular expression>,但它对我不起作用.我怎么这样做git diff,它不会显示任何Ruby评论?
小智 5
一种可能性是(ab)使用在创建差异之前应用的git 的textconv 过滤器,因此您甚至可以转换二进制格式以获得人类可读的差异。
您可以使用任何从文件读取并写入标准输出的脚本,例如删除所有以 开头的行#:
#!/bin/sh
grep -v "^\s*#" "$1" || test $? = 1
Run Code Online (Sandbox Code Playgroud)
(test $? = 1更正 的退出代码grep,详情参见/sf/answers/3473959961/。)
对于 C,有一个sed删除注释的脚本,我将在以下示例中使用它。下载脚本:
cd ~/install
wget http://sed.sourceforge.net/grabbag/scripts/remccoms3.sed
chmod +x remccoms3.sed
Run Code Online (Sandbox Code Playgroud)
将其添加到您的~/.gitconfig:
[diff "strip-comments"]
textconv=~/install/remccoms3.sed
Run Code Online (Sandbox Code Playgroud)
将其添加到存储库.gitattributes以针对某些文件类型启用它:
*.cpp diff=strip-comments
*.c diff=strip-comments
*.h diff=strip-comments
Run Code Online (Sandbox Code Playgroud)
主要缺点是默认情况下它将始终启用,您可以使用--no-textconv.
Git 非常关心您提供给它的数据,并且非常努力不丢失任何信息。对于 Git 来说,将某些行视为没有更改(如果它们已更改)是没有意义的。
我认为唯一合理的方法是对 Git 输出进行后处理,正如 Dogbert 在他的评论中已经表明的那样。