Git Aliasで引数を受け取る
Gitで引数を受け取ることのできるAliasの書き方があるようなので、紹介しておきます。
基本形は以下の通り。
[alias] echo = "!f() { echo ${1}; }; f"
このように~/.gitconfig
記載すると、
$ git echo foo foo
Aliasの先頭に!
を付けるとシェルコマンドとして認識されるので(つけないとpull
やcommit
など、git
コマンドのサブコマンドと認識されます)、つまり上記はシェル関数を定義して即時実行するという仕組みです。 考えてみればシンプルですが、これは物凄く応用範囲が広くて便利です。
たとえば、以下のような感じに使えます。
[alias] ls-repos = "!find . -type d -name .git | xargs dirname" for-all = "!f() { for DIR in $(git ls-repos); do git -C $DIR $@ & done; wait; }; f"
ls-repos
でカレントディレクトリ下のすべてのローカルリポジトリを列挙するエイリアスです。
for-all
は、このls-repos
で列挙した各ローカルリポジトリでgit
コマンドを実行します。
このときサブコマンドを引数として与えているので、任意の操作を行うことができます。
$ ls
repo-1 repo-2 repo-3
$ git for-all pull
Already up to date.
Already up to date.
Already up to date.
みたいな感じ。
個人的には、Go Workspaceで複数リポジトリを使用しているのでこれが便利です。
ちなみに以上はGit AliasのシェルがBashの場合です。Zshだとシンプルにecho = "(){ echo ${1} }"
という感じに書けるとかなんとか。