git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Useful tip about !aliases

From
Kevin Ballard <kevin@sb.org>
Date
Jul 16, 2008, 00:46 UTC
Message-ID
<3BD7F543-7CB4-48B6-8D2C-DEA2ADC6EF5F@sb.org>

Here's something I discovered recently about !aliases that other folks might find useful. The canonical form for a shell alias is something like

   git config alias.foo '!echo bar'

where any args given to foo, as in `git foo blah` are passed along to the shell, so in this case `echo bar blah` would be invoked.

Something that I find very useful is the ability to interpolate arguments into the middle of a command. This doesn't seem possible at first glance, not without a helper script. But it certainly is possible, with the help of shell functions:

   git config alias.reverse '!foo () { args=''; while [[ -n "$*" ]];  
do args="$1 $args"; shift; done; echo $args; }; foo'

Now if you invoke `git foo one two three` you'll get the response "three two one".

Here's another example. This one I particularly like. I call it 'send- patches', because what it does is it takes a single hash and creates patches out of all commits since that hash, invokes send-mail on them, and deletes them. It's a rather quick way of sending off patches. And if you pass any extra arguments, they're given to git-send-email. The most useful part is it adjusts the patch prefix to contain the name of the repository itself, so your recipient knows exactly what your patch is for.

   git config --global alias.send-patches '!foo () { rev="$1"; shift;  
git send-email $(git format-patch -o .mbox --no-prefix --subject- 
prefix="$(printf "PATCH: %s" $(basename $(cd "$(git rev-parse --show- 
cdup)" && pwd)))" $rev) "$@"; rm -rf .mbox; }; foo'
-Kevin Ballard
-- 
Kevin Ballard
http://kevin.sb.org
kevin@sb.org
http://www.tildesoft.com
Next: Johannes Schindelin
Message 1 of 3 in “Useful tip about !aliases”
  1. Kevin BallardJul 16, 2008
  2. Johannes SchindelinJul 16, 2008
  3. Kevin BallardJul 16, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.