git pull all branches from remote repository
如何将所有远程分支拉到自己的存储库中?
如果我键入:
1 | git branch -a |
我得到一长串分支,但如果我键入:
1 | git branch |
号
我只看到其中两个。
如何将所有分支拉入本地列表?
我知道我能做到:
1 | git checkout --track origin/branch-name |
但一次只能抽出一个分支进行检查。如果不运行GIT结帐这样一个冗长的工作——一遍又一遍地跟踪源站/分支名称,有没有办法一次完成所有的工作?
PS。我尝试了以下命令,但没有一个命令使远程分支出现在我的git branch列表中:
1 2 3 | git fetch --all git remote update git pull --all |
。
请阅读以下说明:http://git-scm.com/book/en/git-branching-remote-branches
首先,让我们澄清一些git术语:
- 获取:从远程报告获取内容(或更新)
- 拉:提取(如上所述)并在一个步骤中合并
最初的海报没有提到合并,所以我可以用适当的git术语来猜测。他甚至可能想问"从远程存储库获取所有分支"
如果你看到
或者可以这样做,例如
你甚至可以查一下
(为了确保您可以卸下网线,您将看到命令在不联系远程repo的情况下工作。)
名为remotes/…的分支。被称为远程分支,但它们已经被提取到您的回购。它们是只读的,您不能修改它们(这就是签出时出现消息的原因)。尽管它们反映了上次提取或提取操作时远程回购的状态,但实际上它们存储在本地。
如果您执行
Git工作区包含一个分支的状态。因此,在Git上下文中,您关于立即签出所有远程分支的问题实际上没有意义。你可以一个接一个地检查它们。但是每次你检查下一个,前一个就会从工作区消失。当然,可以按照track all remote git branch中显示的本地分支编写此操作的脚本,但是如果只剩下最后一步,那么编写大规模操作的脚本有什么意义呢?
那么,假设远程分支只能远程存储,而不是本地存储,并且您只是想确保所有内容都是本地的,那么这个问题是否可能是由误解引起的呢?如果您真的希望一次签出多个分支,那么可以在本地克隆您的repo,并将不同的分支签出到不同的工作区域。(2)
很快:如果要确保在本地有所有可用的数据,远程回购只使用
(1)这在简单的标准情况下是正确的。在具有多个远程或手动配置的远程的更复杂的情况下,您可能需要--track选项来精确地指定所需的内容。
(2)这个用例有一个新特性
我通常使用的命令使所有可见的上游分支,跟踪它们在"将所有远程Git分支作为本地分支跟踪"中有详细说明:
1 | 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 |
或:
1 | remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/[^\/]+\//,"",$1); print $1}'`; do git branch --track $brname $remote/$brname ; done |
号
For more readability:
号
1 2 3 4 5 6 7 8 9 | 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; # or git branch --track $brname $remote/$brname ; done |
第二个是创建跟踪远程分支的新本地分支。
我一直用这个,它很好用
1 2 3 | git branch -r | grep -v '\->' | while read remote; do git branch --track"${remote#origin/}""$remote"; done git fetch --all git pull --all |
你应该尝试以下方法:
1 2 | $ git fetch --all $ for branch in `git branch -r | cut -d '/' -f2-` ; do git checkout $branch && git pull origin $branch ; done |
。