跟踪单个远程分支作为本地分支非常简单。

$ 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

我用谷歌搜索了一下,但到目前为止都是胡扯。


当前回答

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/'作为本地分支的后缀。

其他回答

不需要任何脚本(在空目录中):

$ git clone --bare repo_url .git
$ git config core.bare false
$ git checkout

之后,所有远程分支都将被视为本地分支。


原文(俄语)。

for i in `git branch -a | grep remote`; do git branch --track ${i#remotes/origin/} $i; 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/'作为本地分支的后缀。

for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do  git branch --track ${branch##*/} $branch; done

使用这个,你将不会有这样的警告:refname 'origin/dev'是模糊的

如果你想使用powershell,你的遥控器叫做origin。这样就行了。

git fetch    
git branch -r  | %{$_ -replace "  origin/"} | %{git branch --track $_ "origin/$_"}