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

$ 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

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


当前回答

以下是我的BASH命令引用@tjmcewan的解决方案:

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 i in `git branch -a | grep remote`; do git branch --track ${i#remotes/origin/} $i; done

Otto给出的答案很好,但是所有创建的分支都将“origin/”作为名称的开头。如果你只是想让最后一部分(在最后一个/之后)作为你的分支名称,使用这个:

for remote in `git branch -r | grep -v /HEAD`; do git checkout --track $remote ; done

它还有一个好处,就是不会给你任何关于模糊引用的警告。

你可以很容易地编写脚本,但我不知道什么时候它才有价值。这些分支很快就会落后,你必须一直更新它们。

远程分支将自动保持最新,因此在您实际想要处理它的地方创建本地分支是最简单的。

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

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

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


原文(俄语)。

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

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