git clone如何实际工作

我在Github上有一个有两个分支的仓库: masterdevelop

当我克隆版本库并运行$ git branch它只显示master分支。
如果我运行$ git branch -a我可以看到所有的远程分支。

现在,如果我执行$ git checkout develop ,我会收到以下消息:

分支机构开展设置,以追踪远程分支从原产地发展。
切换到一个新的分支'发展'

究竟发生了什么? 当我运行$ git clone remote-url ,或者当我运行$ git checkout develop或者两者都没有时,从远程develop分支提交的内容会被提取?

在检查$ git pull origin develop之后,我是否要做一个$ git pull origin develop develop ,或者它已经完成了?

请帮助我了解在远程有多个分支时clone是如何工作的。


git clone获取所有远程分支,但只为您创建一个本地分支master 。 所以当你运行git branch -a ,你会看到类似这样的东西:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/develop
  remotes/origin/master

这意味着您有一个本地分支master和多个远程分支。 当你运行git checkout develop ,git会创建另一个本地分支来develop跟踪远程分支的origin/developgit尝试同步跟踪分支,所以你不必在check out后再做一次pull

如果本地和远程分支术语听起来令您感到困惑,则可以浏览此文档。 它有一些很好的数字来帮助你理解它们,以及当你进一步提交时本地和远程分支机构如何移动。

您可能会发现这个答案有帮助:如何克隆Git中的所有远程分支?,第一个答案。


git clone首先创建一个新的空库。 (比如git init

然后它将给定的存储库设置为称为“原点”的远程。 ( git remote add

主要工作是通过git fetch来完成的, git fetch是与其他存储库交谈的唯一命令。 它将远程存储库的所有提交转移到当前存储库,并在远程存储库上的分支所对应的“remote / origin /”开始的本地存储库分支内创建。

如果你有一个默认的非裸仓库,它也会调用git checkout来检查通常的master分支。

如果您调用git branch -r它会向您显示“远程”分支,即存储库中的那些分支,这些分支将通过git fetch更新。 (你从来没有直接对这些工作。)

每当你想在分支上工作时,你都会使用git checkout来创建该分支的副本,而不需要“remote / origin /”前缀。 那些是你工作的“当地”分支。 ( git branch会显示那些。)

几乎所有你做的事情都只涉及你的本地仓库。 唯一的例外是git push ,这是更新远程仓库的唯一命令,而git fetch是查询其他仓库的唯一命令。

git pull只是git fetchgit merge的组合。 第一个获取更改并更新remote / origin / *,第二个将这些更改合并到本地分支中。


git clone默认获取版本库的所有分支。 如果您想检出所有分支,则需要克隆存储库的裸副本,取消设置裸标志并将其重置。 让我知道你是否还有其他问题。

链接地址: http://www.djcxy.com/p/89675.html

上一篇: How git clone actually works

下一篇: Multiple working directories with Git?