Implementing some Git aliases indirectly, in shell scripts
Recently I wrote about two ways to (maybe) skip 'Dependabot'
commits when using git log
, and
said at the end that I was probably going to set up Git aliases for
both approaches. I've now both done that and failed to do that, at
the same time. While I have Git aliases for both approaches, the
actual git aliases just shell out to shell scripts.
The simpler and more frustrating case is for only seeing authors that aren't Dependabot:
git log --perl-regexp --author='^((?!dependabot\[bot]).*)$'
This looks like it should be straightforward as an alias, but I was unable to get the alias quoting right in my .gitconfig. No matter what I did it either produced syntax errors from Git or didn't work. So I punted by putting the 'git log ...' bit in a shell script (where I can definitely understand the quoting requirements and get them right) and making the actual alias be in the magic git-config format that runs an external program:
[alias] .... ndlog = !gitndeplog
The reason this case works as a simple alias is that all of the arguments I'd supply (such as a commit range) come after the initial arguments to 'git log'. This isn't the case for the second approach, with attempts to exclude go.mod and go.sum from file paths:
git log -- ':!:go.mod' ':!:go.sum'
The moment I started thinking about how to use this alias, I realized
that I'd sometimes want to supply a range of commits (for example,
because I just did a 'git pull
' and want to see what the newly
pulled commits changed). This range has to go in the middle of the
command line, which means that a Git alias doesn't really work.
And sometimes I might want to supply additional 'git log' switches,
like '-p', or maybe supply a file or path (okay, probably I'll never
do that). There are probably some sophisticated ways to make this
work as an alias, especially if I assume that all of the arguments
I supply will go before the '--', but the simple approach was to
write a shell script that did the argument handling and invoke it
via an alias in the same way as 'git ndlog' does.
Right now the scripts are named in a terse way as if I might want to run them by hand someday, but I should probably rename them both to 'git-<something>'. In practice I'm probably always going to run them as 'git ...', and a git-<something> name makes it clearer what's going on, and easier to find by command completion in my shell if I forget.
|
|