How to embed bash script directly inside a git alias
To run commands inside of a git alias, and in particular to pass arguments to those commands, you will likely have to create a temporary function which you then immediately invoke:
$ vim ~/.gitconfig...[alias] # compare: foo = "! echo begin arg=$1/$2/end" foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
In this example, the function is probably what you need (and is also more flexible as to what you can do in a single "statement"); and you can probably tell that for both options, the remaining args to the git command are simply passed as args to the alias, regardless if it's "echo" or "f"; invoking the function simply consumes the args, ignoring what's not explicitly used:
$ git foo a b cbegin arg=a/b/end a b c$ git foo2 a b cbegin arg=a/b/end
Another example (lists all aliases, based on matching pattern) (note: you can keep reusing the same function name "f()" throughout the .gitconfig):
[alias] alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
The first returns the alias for just "foo$", the second for "foo.*":
$ git alias fooalias.foo ! echo begin arg=$1/$2/end$ git alias 'foo.*'alias.foo ! echo begin arg=$1/$2/endalias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(nb: actual results may vary based on shell; I'm using this with bash on Linux, Unix & Cygwin (Windows).)
I couldn't find in documentation, but if you create a script "git-<name>" in path, you can call it with "git name" in your repo.
See:
$ cd ~/bin$ echo "echo I love this log:>pwd>git log --graph --summary --decorate --all" > git-logg$ chmod +x git-logg$ cd /path/to/your/repo$ git loggI love this log:/path/to/your/repo* commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch)| Author: myself <my@Laptop.(none)>| Date: Fri Apr 1 16:47:20 2011 +0200| | would have been better not to do it at all| ...$
So, you can write any alias you like with this (rather obscure) way too.
Even more you can add autocompletion to that new command defining a function. Info here
$ _git_logg (){ # you can return anything here for the autocompletion for example all the branches __gitcomp_nl "$(__git_refs)" }