ここでの答えのほとんどは、の出力の解析を複雑にしていますgit branch -r
。次のfor
ループを使用して、リモートのすべてのブランチに対して追跡ブランチを作成できます。
例
これらのリモートブランチがあるとしましょう。
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
ローカルでマスター以外を追跡していないことを確認します。
$ git branch -l # or using just git branch
* master
この1つのライナーを使用して、追跡ブランチを作成できます。
$ for i in $(git branch -r | grep -vE "HEAD|master"); do
git branch --track ${i#*/} $i; done
Branch development set up to track remote branch development from origin.
Branch integration set up to track remote branch integration from origin.
Branch production set up to track remote branch production from origin.
Branch staging set up to track remote branch staging from origin.
今確認してください:
$ git branch
development
integration
* master
production
staging
それらを削除するには:
$ git br -D production development integration staging
Deleted branch production (was xxxxx).
Deleted branch development (was xxxxx).
Deleted branch integration (was xxxxx).
Deleted branch staging (was xxxxx).
-vv
スイッチを使用すると、git branch
次のことを確認できます。
$ git br -vv
development xxxxx [origin/development] commit log msg ....
integration xxxxx [origin/integration] commit log msg ....
* master xxxxx [origin/master] commit log msg ....
production xxxxx [origin/production] commit log msg ....
staging xxxxx [origin/staging] commit log msg ....
forループの内訳
ループは基本的にコマンドを呼び出し、git branch -r
を使用して出力内のすべてのHEADまたはマスターブランチを除外しgrep -vE "HEAD|master"
ます。ブランチのみからorigin/
サブストリングを除いた名前を取得するには、Bashのストリング操作を使用します${var#stringtoremove}
。これにより、変数「stringtoremove」が変数から削除されます$var
。この例ではorigin/
、変数から文字列を削除しています$i
。
注:または、これを行うために使用git checkout --track ...
することもできます。
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
ただし、チェックアウトを実行するときにブランチ間を切り替えるため、この方法は特に気にしません。完了すると、最後に作成したブランチがそのまま残ります。
参考文献
git checkout --track origin/branchname