如何克隆特定的 Git 分支?

Git 克隆将表现为将远程当前工作分支复制到本地。

有没有办法我自己克隆特定分支,而无需在远程存储库上切换分支?

答案

git clone -b <branch> <remote_repo>

例:

git clone -b my-branch git@github.com:user/myproject.git

在 Git 1.7.10 及更高版本中,添加--single-branch以防止提取所有分支。例如,使用 OpenCV 2.4 分支:

git clone -b opencv-2.4 --single-branch https://github.com/Itseez/opencv.git
git clone --single-branch --branch <branchname> <remote-repo>

--single-branch选项从1.7.10版本开始生效。

请参阅许多人喜欢的其他答案

您可能还需要确保您了解差异。区别在于:通过调用git clone --branch <branchname> url您将获取所有分支并签出一个分支。例如,这可能意味着您的存储库具有 5kB 文档或 Wiki 分支以及 5GB 数据分支。而且,每当您要编辑首页时,最终可能会克隆 5GB 的数据。

再说一遍,这并不是说git clone --branch并不是实现此目的的方法,只是当您询问克隆特定分支时,这并不总是您想要完成的。

在编写下面的原始答案时,git 没有--single-branch选项,但是为了让生气的蜜蜂完全满意,我们保留它。

复制复制者非常不喜欢的答案是:

git init
git remote add -t refspec remotename host:/dir.git
git fetch

这是一种非常简单的方法:)

克隆存储库

git clone <repository_url>

列出所有分支

git branch -a

签出您想要的分支

git checkout <name_of_branch>

要克隆分支而不获取其他分支:

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH
git checkout -b <branch-name> <origin/branch_name>

例如我的情况:

git branch -a
* master
  origin/HEAD
  origin/enum-account-number
  origin/master
  origin/rel_table_play
  origin/sugarfield_customer_number_show_c

因此,根据我的 enum-account-number 分支创建一个新分支:

git checkout -b enum-account-number origin/enum-account-number

点击返回后,将发生以下情况:

Branch enum-account-number set up to track remote branch refs/remotes/origin/enum-account-number.
Switched to a new branch "enum-account-number

使用该名称在本地系统上创建一个分支。例如,说您想获得名为“branch-05142011” 的分支

git branch branch-05142011 origin/branch-05142011

它会给您一条消息:

$ git checkout --track origin/branch-05142011
Branch branch-05142011 set up to track remote branch refs/remotes/origin/branch-05142011.
Switched to a new branch "branch-05142011"

现在,只需按如下所示签出分支,即可获得代码
git checkout branch-05142011

git --branch <branchname> <url>

但是 bash 完成并没有得到这个关键:-- --branch

请享用。