假设我在文件hello.rb
中添加了两行。
# this is a comment
puts "hello world"
如果我git diff
,则会显示我添加了两行。
我不希望git显示任何Ruby注释的行。我尝试使用git diff -G <regular expression>
,但它对我不起作用。我如何做git diff
以便它不会显示任何Ruby注释?
答案 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
将其禁用。