Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git diff without comments

Tags:

git

ruby

Let's say I added two lines to the file hello.rb.

# this is a comment
puts "hello world"

If I do git diff, it will show that I added two lines.

I don't want git to show any line which is a Ruby comment. I tried using git diff -G <regular expression>, but it didn't work for me. How do I do git diff so that it won't show any Ruby comments?

like image 229
r3b00t Avatar asked Sep 11 '13 06:09

r3b00t


1 Answers

One possibility would be (ab)using git's textconv filters which are applied before the diff is created, so you can even transform binary formats to get a human-readable diff.

You can use any script that reads from a file and writes to stdout, such as this one which strips all lines starting with #:

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

(test $? = 1 corrects the exit code of grep, see https://stackoverflow.com/a/49627999/4085967 for details.)

For C, there is a sed script to remove comments, which I will use in the following example. Download the script:

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

Add it to your ~/.gitconfig:

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

Add it to the repository's .gitattributes to enable it for certain filetypes:

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

The main downside is that this will be always enabled by default, you can disable it with --no-textconv.

like image 190
mgmax Avatar answered Oct 06 '22 07:10

mgmax