From: Michael J Gruber Date: Sat, 21 Nov 2009 17:31:35 GMT Subject: Re: How to make git diff-* ignore some patterns? Message-ID: <4B0823F7.7030607@drmicha.warpmail.net> In-Reply-To: <4B0817EE.1040000@dirk.my1.cc> Dirk Süsserott venit, vidit, dixit 21.11.2009 17:40: > Hi list, > > is there a way to tell "git diff-index" to ignore some special patterns, > such that /^-- Dump completed on .*$/ is NOT recognized as a difference > and "git diff-index" returns 0 if that's the only difference? > > -- Dirk > > > I have a mySQL database which I backup daily using mysqldump (cronjob). > The result is a text file (*.sql) with all the "create" and "insert" > statements and some metadata. > I used to use tar and gzip to backup these files and got a huge > collection of backups in the last tree years (500+ MB). > Then I switched to Git and recorded only the diffs between day X and day > X-1. My repository shrunk to 16 MB for the very same data, which was great! > > My database doesn't change every day, but I backup it anway and store > the backup files with Git and a cronjob. It does: > > --------------- > mysqldump ... -r # that's the output file ;-) > git add > if ! git diff-index --quiet HEAD --; then > git commit -m "Backup of at " > fi > --------------- > > This way, a new commit is only done when the backupfile has changed. So > far, so perfect. > A few days ago my web hoster (where the database actually resides) > changed the mySQL version. > mysqldump now writes "-- Dump completed on " to the file and > Git correctly recognizes this as a change and my script creates a new > commit. Every day, even if only that line has changed. > > I'd like to skip these commits if only the "Dump completed" line has > changed. > Is the dump guaranteed to be in a specific order? If yes then this procedure makes sense. (pdfs etc. are problematic because of reordering.) You can either egrep -v through the output of git diff-index, or define a diff driver: set an attribute, say "dumpdiff", for dump files (see gitattributes) and define diff driver as git config diff.dumpdiff.textconv = dumpdiff.sh where dumpdiff.sh is "egrep -v ...". You may need to call diff-index with --ext-diff. I haven't tried, though ;) Cheers, Michael