peco を使って リモートブランチをチェックアウトする
peco は標準入力をインクリメンタル検索ができるツールです。
これをつかって git のリモートブランチをチェックアウトする方法を記載します。
最終形
以下の内容で例えば remote.sh というファイル名で保存して .bashrc から source コマンドで読み込みます。
# !/bin/sh
coremote () {
remotename=`echo $1 | sed -r "s#([^/]+)/.*#\1#"`
branchname=`echo $1 | sed -r "s#[^/]+/##"`
echo git checkout -b $branchname $remotename/$branchname
git checkout -b $branchname $remotename/$branchname
}
alias cor='export -f coremote; git branch -r | peco | xargs -I{} bash -c "coremote {}"'
alias の cor を呼び出せば、インクリメンタル検索を行ってリモートブランチをチェックアウトできます。
$ cor
解説
git branch -r コマンド
git のリモートブランチを取得するには git branch -r コマンドを実行します。
git branch -r コマンドを実行すると、リモートブランチの情報を標準出力に出力します。
peco コマンド
peco は標準入力から受けたデータをユーザーの入力に基づいてフィルタリングして、ユーザーの選択した一行を表示します。
こんな感じ
git branch -r | peco
git checkout コマンド
peco コマンドの結果リモートブランチの情報を例えば以下のような形で出力します。
origin/feauture/hogehoge
git コマンドでは以下のようなコマンドでリモートブランチをチェックアウトします。
git checkout -b feauture/hogehoge origin/feauture/hogehoge
sed コマンド
origin/feauture/hogehoge を origin の部分と feauture/hogehoge の部分に分離するために sed コマンドを使います。
リモート名 (origin の部分)
echo origin/feauture/hogehoge | sed -r "s#([^/]+)/.*#\1#""
ブランチ名 (feauture/hogehoge の部分)
echo origin/feauture/hogehoge | sed -r "s#([^/]+)/.*#\1#""
関数で git checkout コマンドを組み立てる。
coremote () {
remotename=`echo $1 | sed -r "s#([^/]+)/.*#\1#"`
branchname=`echo $1 | sed -r "s#[^/]+/##"`
git checkout -b $branchname $remotename/$branchname
}
これで以下を実行すると
coremote origin/feauture/hogehoge
以下コマンドが実行されます。
git checkout -b feauture/hogehoge origin/feauture/hogehoge
xargs で標準出力の結果を引数に関数 coremote を呼び出す
coremote に標準出力からのデータを引数として渡すために xargs を使います。
単純に以下のようにすると
git branch -r | peco | xargs coremote
以下のようなエラーになります。
xargs: coremote: そのようなファイルやディレクトリはありません
coremote は bash の関数なので bash 経由で以下のように呼び出します。
git branch -r | peco | xargs -I{} bash -c "coremote {}"'
そうすると以下のエラーになります。
bash: coremote: コマンドが見つかりません
あらかじめ export -f function をしておくといいらしい。
https://qiita.com/D-3/items/8bdb834ff53256cef481
以下のようになる。
export -f coremote; git branch -r | peco | xargs -I{} bash -c "coremote {}"
参考
https://qiita.com/D-3/items/8bdb834ff53256cef481
https://qiita.com/sukebeeeeei/items/9b815e56a173a281f42f
https://qiita.com/m-tmatma/items/44bfce739023a5b00ac3