为什么`git clone`命令不会克隆所有分支?

11

如果我这样做

$ git clone https://github.com/dtu-compute/docker-mongodb
$ cd docker-mongodb
$ git branch
* master

但是,如果你查看Github分支页面,会发现有两个分支。

问题

为什么使用git clone命令无法获取全部分支?


5
如果您检出该分支,您会发现它可以很好地工作。 - Tim
1
但为什么它没有列出来?这与分支的推送方式有关吗? - Jasmine Lognnes
7
git branch -a 会列出所有分支。 - Tim
2
如果一个远程仓库没有主分支,你可能会问为什么git clone什么都没有克隆。实际上,如果没有使用 --single-branch--depth 等选项,它会将所有内容都克隆下来。这些选项一开始是隐藏的。而 git branch 只列出本地分支。 - ElpieKay
1个回答

14

git branch 默认只显示本地分支;使用 git branch -r 查看远程分支或使用 git branch -a 查看所有分支。git clone 只创建一个本地分支,默认为master,并跟踪(同样默认)远程仓库上的master分支。


但是,如果你想要在远程存在但本地不存在的分支中工作呢?如果我运行 git checkout exists-remotely ,它会说它创建了一个新的分支,假设这个分支是基于 master 分支的。你如何确保你获取的是已经存在的、远程的 exists-remotely 而不是新建的一个分支呢? - Mitya
1
你的假设是错误的。如果在本地找不到 <branch> 分支,但恰好存在一个远程跟踪分支(称其为 <remote>)与匹配的名称,并且未指定 --no-guess,则视为等同于以下命令:$ git checkout -b <branch> --track <remote>/<branch> - chepner
好的,当我克隆一个仓库时,最终只有主分支,然后我检出一个本地未列出但我知道远程存在的分支,为什么它告诉我已经切换到“新分支”,而且文件/代码与同名的远程分支不同呢?我很难理解这个问题。 - Mitya
2
因为它会创建一个新的 跟踪(tracking) 分支以镜像远程分支,而不是基于你当前检出分支的新分支,所以在切换前需要注意。 - chepner
谢谢,这样就清楚了。感激不尽。 - Mitya

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