协慌网

登录 贡献 社区

如何在 Git 中克隆所有远程分支?

我有一个master和一个development分支,都推到了GitHub 。我已经clone d, pull ed 和fetch ed,但是我仍然无法获得除master分支之外的任何东西。

我确定我错过了一些明显的东西,但是我已经阅读了手册,而且我一点也不开心。

答案

首先,克隆一个远程Git存储库并将其cd入其中:

$ git clone git://example.com/myproject
$ cd myproject

接下来,查看存储库中的本地分支:

$ git branch
* master

但是您的存储库中还隐藏着其他分支!你可以使用-a标志看到这些:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

如果您只想快速查看上游分支,可以直接查看:

$ git checkout origin/experimental

但是如果你想在那个分支上工作,你需要创建一个本地跟踪分支,它由以下内容自动完成:

$ git checkout experimental

你会看到的

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

最后一行引发了一些人:“新分支” - 是吧?它的真正含义是从索引中获取分支并在本地为您创建。 一行实际上提供了更多信息,因为它告诉您分支正在设置为跟踪远程分支,这通常意味着 origin / branch_name 分支

现在,如果你看看当地的分支机构,你会看到:

$ git branch
* experimental
  master

您实际上可以使用git remote跟踪多个远程存储库。

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

在这一点上,事情变得非常疯狂,所以运行gitk来看看发生了什么:

$ gitk --all &

如果您想要一次获取许多远程分支,请执行以下操作:

$ git pull --all

现在,您可以根据需要签出任何分支,而无需访问远程存储库。

这个Bash脚本帮助了我:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

它将为除 master 之外的所有远程分支创建跟踪分支(您可能从原始克隆命令获得)。我想你可能还需要做一个

git fetch --all
git pull --all

为了确定。

一个班轮git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs像往常一样:在我们知道复制 rm -rf Universe 之前在你的设置中进行测试

单行的积分转到用户 cfi

首先,克隆一个远程Git存储库并cd到其中:

$ git clone git://example.com/myproject
$ cd myproject

接下来,查看存储库中的本地分支:

$ git branch
* master

但是您的存储库中还隐藏着其他分支!您可以使用-a标志查看它们:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

如果您只想快速浏览上游分支机构,可以直接查看:

$ git checkout origin/experimental

但是,如果要在该分支上工作,则需要创建一个本地跟踪分支,该分支可以通过以下方式自动完成:

$ git checkout experimental

你会看到

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

最后一行引发了一些人:“新分支”- 是吗?这实际上意味着分支是从索引中提取的,并为您本地创建。 一行实际上更具信息性,因为它告诉您正在设置分支以跟踪远程分支,这通常意味着 origin / branch_name 分支

现在,如果您查看本地分支机构,将会看到以下内容:

$ git branch
* experimental
  master

实际上,您可以使用git remote跟踪多个远程存储库。

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

此时,事情变得非常疯狂,因此运行gitk看看发生了什么:

$ gitk --all &

如果您要一次获取许多远程分支,请执行以下操作:

$ git pull --all

现在,您可以根据需要签出任何分支,而无需访问远程存储库。

这个Bash脚本帮助我:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

它将为所有远程分支(主服务器除外)创建跟踪分支(您可能是从原始克隆命令获得的)。我认为您可能仍需要做一个

git fetch --all
git pull --all

为了确定。

一线git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs像往常一样:在复制 rm -rf Universe 之前,我们先在设置中进行测试

一线信用归功于用户 CFI