前言
一次看到一篇博客上在第一次拉取远程代码到本地的操作步骤中写到先用了git clone 克隆了远程仓库到本地,然后又执行了git pull同步数据,心生疑惑,git clone后为什么还要git pull一下?于是查一下二者的区别。
git clone
从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做git clone
。简单讲,git clone
就是将一个库复制到本地,是一个本地从无到有的过程。包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等。
git clone是远程操作的第一步,通常是从远程主机克隆一个版本库,
eg:
$ git clone '远程仓库地址(ssh/http)'
该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果想要在本地制定不同的目录名,可以使用git clone 命令的第二个参数设置本地目录名。
eg:
$ git clone '版本库网址' '本地目录名'
git clone支持多种协议,除了http(s),还有ssh,git,本地协议。
git pull
从远程服务器获取到一个branch分支的更新到本地,并更新本地库,叫做git pull
.(pull是指同步一个你在本地有版本的库内容更新的部分到你的本地库)。
git pull
作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的书写格式如下
eg:
$ git pull #远程主机(origin)# #远程分支(next)#:#本地分支(master)#
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
eg:
$ git pull #远程主机(origin)# #远程分支(next)#
该命令相当于 git fetch origin
+ git merge origin/next
适用场景
通常情况下,远程操作的第一步,是使用git clone从远程主机克隆一个版本库到本地。
本地修改代码后,每次从本地仓库push到远程仓库之前都要先进行git pull操作,保证push到远程仓库时没有版本冲突。
在某些场合,git会自动在本地和远程分支之间,建立一种追踪关系。比如,在git clone
的时候,所有本地分支默认与远程主机的同名分支建立追踪关系。也就是,Git 会自动创建一个名为 master 的本地分支来跟踪 origin/master。(如果需要关联不同的分支,使用命令git checkout --track origin/br-2.1.2.1
)
当然,git也可以手动建立追踪: git branch --set-upstream master origin/next
—>指定master分支追踪到origin/next。
注:将本地分支跟踪服务器分支可以使用下面的命令:
$ git branch --set-upstream-to=origin/远程分支名称 本地分支名称
如果当前分支只有一个追踪分支,连远程主机名都可以省略。$ git pull
表示当前分支自动与唯一一个追踪分支进行合并。