git status を再帰的に全Gitディレクトリで実行して、変更のあるリポジトリを簡単に見つけたい。

と思ったので作りました。

yukimemi/gsr

go get でインストールできます。

(バイナリファイルもそのうち用意する)

$ go get github.com/yukimemi/gsr

使い方は簡単で

$ gsr [再帰的にチェックしたいディレクトリ]

とすると、 git status で変更のあるディレクトリだけ出力されます。 デフォルトでは、ディレクトリ名だけが出力されます。

$ gsr --status [再帰的にチェックしたいディレクトリ]

と、オプションをつけると、 git status --short の出力結果も出力されます。

ちなみに、 [再帰的にチェックしたいディレクトリ] を指定しなかった場合、 ghq root を対象にチェックします。

motemen/ghq を使っている人には便利です。

デフォルトの出力がディレクトリ名なのは、pecoとか使って移動したいからです。

例えば、 .zshrc に、こんな設定を書いてやると、

function __filter() {
  peco | while read line
  do
    echo "Exec: [$@ $line]"
    $@ $line
  done
}
alias gsrl='gsr | __filter cd'
alias ghl='gsr --all | __filter cd'

gsrl で、 ghq で管理された変更のあるgitディレクトリに移動出来るようになり、 ghlghq で管理されたすべてのディレクトリに移動出来るようになります。

非常にべんり。

さらに、 リモートと差分のあるリポジトリも対象としたい場合、以下のオプションが使用できます。

$ gsr --ahead --behind
オプション出力対象
--aheadリモートより新しいものも対象にする
--behindリモートより古いものも対象にする

僕は常にこのオプションを有効化して使うので、環境変数に指定しています。 .zshenv とかに書いておくと、実行時にオプションをいちいち指定しなくても有効化されます。

export GSR_SHOW_AHEAD=1
export GSR_SHOW_BEHIND=1

これは、使ってるライブラリ urfave/cli の機能みたいです。すごい。


参考

urfave/cli

git statusを利用したリポジトリ情報のプロンプト表示