只克隆一个分支

499
我想知道如何克隆Git仓库中的单个分支,而不是整个仓库。

3
还有其他几个人指出的很正确:除非有大文件提交到某些分支而从未提交到其他分支,否则这实际上并不会有太大的区别。 - Cascabel
4
@Jefromi说:当你克隆它时,确实会有所不同...请看这个链接:https://dev59.com/WW7Xa4cB1Zd3GeqPlQgE - Amol M Kulkarni
6
就像我两年前说的那样,只有当某些分支包含了其他分支没有的大量数据时才会出现这种情况。你链接的那个问题实际上并没有说只有一个分支很小——如果所有巨大的数据都在所有分支的共同历史中,那么克隆一个分支的大小也会一样大。 - Cascabel
2
这在特定情况下也会产生影响,例如只想让某些接收者看到特定的分支及其历史记录。 - Old McStopher
2
VonC在这里给出了非常完整的答案:https://dev59.com/kHI-5IYBdhLWcg3wlpeW#9920956 - Benj
注意:现在(Git 2.26,2020年第一季度)它也适用于子模块。请参见如何在Git中克隆单个分支?的最后一节。 - VonC
4个回答

877

从这篇公告中Git 1.7.10(2012年4月):

  • git clone 学会了 --single-branch选项,可以将克隆限制为单个分支(惊喜!)。不指向分支历史的标签不会被获取。

实际上,Git允许您只克隆一个分支,例如:

git clone -b mybranch --single-branch git://sub.domain.com/repo.git

注意:同时,您还可以添加另一个单独的分支或“撤消”此操作。


7
谢谢!如果--single-branch命令出错,只需将其移除并保留-b即可 :) - Braunson
29
如果你只输入“-b”,那么你会克隆所有分支,然后再切换到那个分支。这不是期望的结果。所以我建议你尽可能更新 Git 到最新版本(或者>=1.7.10),这样就不会出现错误了。 - shakaran
6
有人知道如何克隆两个分支——或将另一个单独的分支添加到已经克隆的单独分支存储库中吗? - Billy Moon
2
只是一点小建议,如果您遇到任何访问相关的问题,请使用 https URL 而不是 git@ URL (即 ssh URL)。 - phoenix
2
这里使用 --depth=1 有帮助吗?我希望它有帮助,因为我只想获取一个提交和没有额外的文件。 - user11810894
显示剩余8条评论

71

你可以使用以下方式创建一个新的仓库:

git init 

然后使用

git fetch url-to-repo branchname:refs/remotes/origin/branchname

获取特定分支到本地远程跟踪分支。


3
你把 "branchname" 替换成你想要的分支名了吗? - Lily Ballard
1
@Xcode:如果您这样做,您可能想要执行 git remote add origin <url> 命令,这样您就会得到一个远程库,就像您克隆一样。(然后您可以编辑 .git/config 中的 refspec 来避免全部获取。) - Cascabel
3
直接使用git fetch不能添加远程仓库。以下是我使用的命令:git init; git remote add origin git@github.com:...; git fetch origin <branch>:refs/remotes/origin/<branch>; git checkout <branch>。 - Eric Darchis
1
@hugemeow:你可以使用git pull,但问题是如何克隆一个分支。git pull也会将该分支合并到您的本地分支中,这可能是需要的,也可能不是。如果git remote -v没有输出,那么我猜你没有远程仓库。 - Lily Ballard
1
可能值得指出的是,您必须使用您的分支的实际名称替换“branchname”的两个实例。 - infiniteloop
显示剩余9条评论

29
"

--single-branch”开关就是你的答案,但它只在你使用git版本1.8.X及以上时才有效,请先检查。

"
#git --version 

如果您已经安装了 Git 1.8.X 版本,则可以使用 "-b branch" 和 "--single branch" 来克隆单个分支。

#git clone -b branch --single-branch git://github/repository.git

在Ubuntu 12.04/12.10/13.10和Debian 7中,默认的git安装只支持1.7.x版本,其中--single-branch是一个未知的选项。在这种情况下,您需要从非默认ppa中首先安装更新的git。

sudo add-apt-repository ppa:pdoes/ppa
sudo apt-get update
sudo apt-get install git
git --version

一旦安装了1.8.X,现在只需执行以下操作:

git clone -b branch --single-branch git://github/repository.git

现在Git只会从服务器下载单个分支。


3
如何在较老版本的Debian发行版中更新git的快速指南,点赞+1。 - Dielson Sales
小提示:要获取add-apt-repository命令,请安装software-properties-common软件包,我还必须安装python-software-properties。(我知道这是一个旧答案,但它仍然相关;至少对我来说是这样!)。 - Graftak

24

我用下面的一条Git命令完成了如下操作:

git clone [url] -b [branch-name] --single-branch

我也会一直使用这个命令来克隆单个分支。 - yussan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接