结论
拉取git远程仓库中特定的单个分支的关键在于:“调用git clone时候,添加--branch选项与 --single-branch”。
git clone
git clone克隆远程仓库时,默认会依次做以下事情:
- 创建本地的“远程追踪分支”,用于记录远程仓库中每个分支在克隆仓库时的状态。
- 创建并检出本地的“初始化”分支,该初始化分支复制于远程仓库中的当前分支。
- 调用不带参数的git fetch,下载数据并更新所有的远程追踪分支。
- 调用不带参数的git pull,合并下载的数据当本地分支。
branch选项与single-branch选项说明:
-
--branch <name>选项:“新生成的本地仓库的HEAD不指向远程仓库中HEAD指向的分支,而是将新生成的本地仓库的HEAD指向指定的 <name>分支”。HEAD是用于标识仓库的当前所在分支的,对于git clone而言,在创建完远程追踪分支后,需要创建本地的初始化分支,该初始化分支复制于远程仓库的当前分支,因此需要知道远程仓库中的当前分支是谁,这可以通过查看远程仓库中的HEAD确认,也就是说默认情况,git clone会在第二步在本地复制远程仓库当前所在的分支。但是指定--branch <name>后,git clone就是复制指定的远程分支,而非远程仓库当前的分支。注意<name>必须是远程仓库中存在的分支名,否则会分支不存在的错误。
-
--single-branch选项:只克隆一个远程仓库中分支的历史,默认是远程仓库HEAD指向的分支,通过 --branch 选项可以指定克隆其它远程分支。注意该选项是作用在git clone第一步的,即怎样创建远程追踪分支,指定它,就只会生成一个远程追踪分支。另外当远程仓库处于“Detach HEAD”状态时,并且指定了该选项,将不会创建远程追踪分支。
实例
有以下远程仓库,有两个分支,只拉取online分支:
执行git clone --branch online --single-branch -- <URL> <自定义本地仓库名>
。
如果不加--single-branch
,执行git clone --branch online <URL> <自定义本地仓库名>
:
发现远程追踪分支除了online,还有其它分支。
如果需要再生成本地master分支,则执行git branch master remotes/origin/master
。