git中pull和clone有什么区别?

时间:2010-09-01 17:30:32

标签: git clone pull

执行(mkdir repocd repo之后)之间有什么区别:

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

git clone git://github.com/cmcculloh/repo.git

我的意思是,显然一个是短的,但除此之外他们基本上做同样的事情?

11 个答案:

答案 0 :(得分:209)

git clone是如何获取要处理的现有存储库的本地副本的。它通常只对给定的存储库使用一次,除非你想要它的多个工作副本。 (或者想弄乱你的当地人之后得到一份干净的副本......)

git pull(或git fetch + git merge)是您使用来自远程存储库的新提交更新本地副本的方式。如果您正在与他人合作,那么这将是您经常运行的命令。

正如您的第一个示例所示,可以使用各种其他git命令模拟git clone,但事实并非git pull正在做的事情与{{基本相同的事情“ 1}}(反之亦然)。

答案 1 :(得分:102)

它们基本相同,除了克隆将设置其他远程跟踪分支,而不仅仅是主分支。查看man page

  

将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(使用git branch -r可见),并创建并检出从克隆存储库当前活动分叉的初始分支分支。

答案 2 :(得分:97)

用外行语言我们可以说:

  • 克隆:获取远程存储库的工作副本。
  • :我正在处理此问题,请告诉我其他人可能更新的新更改。

答案 3 :(得分:24)

git clone表示您正在制作系统中存储库的副本。

git fork表示您正在将存储库复制到您的Github帐户。

git pull表示您正在获取最后修改的存储库。

git push表示您在修改后返回存储库。

外行人的任期:

git clone正在下载,git pull正在刷新。

答案 4 :(得分:8)

克隆:将远程服务器存储库复制到本地计算机。

:获取其他已添加到本地计算机的新更改。

这是不同的。

克隆通常用于获取远程回购副本。

Pull用于查看其他队友添加的代码,如果您是团队合作。

答案 5 :(得分:8)

克隆小姐:我将新副本复制到本地。

Pull先生:我已经在本地拥有它,我只是对其进行更新。


克隆小姐:我可以做你做的事!你只是我的一部分。

拉尔先生:同上!


克隆小姐:不,您没有创造。这就是我要做的:

  1. 创建空的裸仓库
  2. 填充远程跟踪分支机构(回购中的所有分支均已下载到本地计算机)
  3. 不带参数运行git fetch

您只执行#3,然后合并,而我不需要这样做(我是新鲜的)。

拉先生:聪明的裤子,没什么大不了的,我先做一个“ git init”!那我们就一样了。

克隆小姐:亲爱的,您不需要结帐分支吗?谁来做?我!

拉尔先生:对,这是需要的。我需要一个默认分支来执行操作。但是..但是 我在现有存储库上具有额外的“合并”功能!这使我成为Git中最常用的命令;)


Git的创建者:请拉马先生,如果--bare或--mirror与clone或init一起使用,则不会发生合并。它仍然是只读的。对于您来说,克隆小姐,git checkout可以用git fetch <remote> <srcBranch>:<destBranch>代替,除非您想使用-s <strategy>来进行提取,而pull缺少。


克隆小姐:不知何故我已经感觉像是一个胜利者,但也让我放弃:我的命令适用于存储库中的所有分支。你是个头脑宽广的拉尔先生吗?

先生。拉:在从仓库中获取所有分支时,我头脑很宽广。但是合并只会在当前已签出的分支上发生。排他性是一流的!

答案 6 :(得分:3)

git clone 仅用于完全下载远程服务器存储库上当前正在运行的内容,并将其保存在放置该项目的计算机文件夹中。 通常,仅在我们第一次上载项目时才使用它。拉那之后是更好的选择。

git pull 本质上是(克隆(下载)+合并)操作,通常在您进行团队合作时使用。换句话说,当您想要该项目中的最新更改时,可以拉动。

答案 7 :(得分:2)

嗯,当我拉动时看到远程分支“4.2”时缺少什么,就像我克隆时那样?有些东西显然不相同。

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

VS

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

答案 8 :(得分:1)

虽然git fetch命令将获取您尚未拥有的服务器上的所有更改,但它根本不会修改您的工作目录。它只是为您获取数据并让您自己合并。但是,有一个名为git pull的命令,在大多数情况下基本上是git fetch,后面紧跟git merge

了解详情:https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling

答案 9 :(得分:1)

克隆-:它将在本地计算机上创建远程存储库项目的完全相同的副本。

拉动-:假设两个或两个以上的人共享同一个存储库。 (假设另一个人的名字是Syam) (存储库是您的项目在Github中存在的地方),因此,如果Syam在其本地的同一项目中进行了一些更改并将其推送到远程存储库,则Syam所做的任何更改都不会反映在您的本地中。因此,要在本地反映这些新变化,您必须使用git pull。总的来说,我们使用git pull来更新项目。

所以基本上我们只使用git clone一次,而我们多次使用git pull。

答案 10 :(得分:0)

git clone URL --->完整的项目或资源库将作为单独的目录下载。不仅是变化 git pull URL --->获取+合并->仅获取已完成的更改,而不是整个项目