単一のリモートブランチをローカルブランチとして追跡するのは簡単です。
$ git checkout --track -b ${branch_name} Origin/${branch_name}
すべてのローカルブランチをリモートにプッシュし、必要に応じて新しいリモートブランチを作成することも簡単です。
$ git Push --all Origin
逆にしたいです。単一のソースにX個のリモートブランチがある場合:
$ git branch -r
branch1
branch2
branch3
.
.
.
それらをすべて手動で作成する必要なしに、それらすべてのリモートブランチのローカルトラッキングブランチを作成できますか?次のように言います:
$ git checkout --track -b --all Origin
私はグーグルとRTMを使いましたが、今のところ二段になっています。
Ottoからの回答は良いですが、作成されたすべてのブランチには名前の先頭に「Origin /」が付きます。最後の部分(最後の/の後)を結果のブランチ名にする場合は、これを使用します。
for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done
また、あいまいな参照に関する警告を表示しないという利点もあります。
私が使用する私のワンライナーは次のとおりです(bsysシェルで、msysgit1.7.4でテスト済み):
コピー&ペーストの場合:
_remote=Origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch --set-upstream-to $remote/$brname $brname; done
_
より読みやすくするために:
_remote=Origin ; // put here the name of the remote you want
for brname in `
git branch -r | grep $remote | grep -v master | grep -v HEAD
| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
git branch --set-upstream-to $remote/$brname $brname;
done
_
remote
変数で指定したリモートからのアップストリームブランチのみを選択します( 'Origin
'または現在のGitリポジトリのリモートのいずれかに設定した名前を使用できます)。awk
式を介して_Origin/a/Branch/Name => a/Branch/Name
_。アップストリームブランチを設定します _--set-upstream-to
_を介して(または_-u
_を介して であり、_--track
_ではありません:
利点は、ブランチが既に存在する場合、失敗せず、そのブランチのOriginを変更せず、branch.xxx.(remote|merge)
設定のみを構成することです。
_branch.aBranchName.remote=Origin
branch.aBranchName.merge=refs/heads/a/Branch/Name
_
このコマンドは、すべてのリモートアップストリームブランチのローカルブランチを作成し、リモートおよびマージ設定をそのリモートブランチに設定します。
簡単にスクリプトを作成できますが、いつ価値があるかわかりません。これらのブランチはすぐに遅れてしまい、常に更新する必要があります。
リモートブランチは自動的に最新の状態に保たれるため、実際に作業したい場所にローカルブランチを作成するのが最も簡単です。
for i in `git branch -a | grep remote`; do git branch --track ${i#remotes/Origin/} $i; done
スクリプトなし(空のディレクトリ内):
$ git clone --bare repo_url .git
$ git config core.bare false
$ git checkout
その後、すべてのリモートブランチはローカルとして認識されます。
Powershellを使用する場合、リモートはOriginと呼ばれます。その後、これは動作します。
git fetch
git branch -r | %{$_ -replace " Origin/"} | %{git branch --track $_ "Origin/$_"}
@tjmcewanが参照するBASHコマンドの私のソリューションは次のとおりです。
for remote in `git branch -r | grep -v /HEAD `; do git branch --track ${remote/"Origin/"/""}; done
私の目標は、作成されたすべてのブランチが名前の先頭に「Origin /」を持つという問題を解決することです。これは、$ remote変数に「Origin /」が含まれていることをテストしたためです。
for remote in `git branch -r | grep -v /HEAD`; do echo $remote ; done
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do git branch --track ${branch##*/} $branch; done
これを使用すると、次のような警告は表示されません。refname 'Origin/dev' is ambiguous
tjmcewan's answer と同じことをするが、Windowsでは、これをbatchファイルから呼び出します:
for /f "delims=" %%r in ('git branch -r ^| grep -v master') do git checkout --track %%r
または、コマンドラインから:
for /f "delims=" %r in ('git branch -r ^| grep -v master') do git checkout --track %r
既にいくつかのブランチをチェックアウトしていて、
次のbashおよびzsh互換スクリプトを使用できます。
git branch -r | while read b; do if git branch | grep -q " ${b##*/}$"; then git branch --set-upstream ${b##*/} $b; else git branch --track ${b##*/} $b; fi; done
Bashを使用して、すべてのブランチをチェックアウトする場合:
for remote in `git branch -r`; do git checkout $(echo $remote | cut -d'/' -f 2); done
新しいリモートトラッキングブランチをダウンさせるフェッチを行う場合、ローカルの編集可能なコピーが自動的に作成されるわけではないことに注意してください。
for rembranch in `git remote update 2>&1 > /dev/null ; git branch -r|egrep -wv "HEAD|master"`
do
git checkout --track -b `echo $rembranch|awk -F\/ '{print $2}'` $rembranch;
done
説明:
1行目:「git branch -r」(リモートへの変更に関する情報を更新するための「git remote update」が続く)は、すべてのリモートブランチをリストします。 「egrep -vw」は、HEADおよび結果にmasterを持つエントリをノックするために使用されます。
3行目:ローカルでチェックアウトしながら、指定されたリモートブランチを追跡します。単純なawkを使用して、「Origin /」がローカルブランチのサフィックスになるのを防ぎます。