【问题标题】:What is the difference between pull and clone in git?git中的pull和clone有什么区别?
【发布时间】:2011-04-06 22:40:36
【问题描述】:

做(在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

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

【问题讨论】:

  • git pull 是最没用的 Git 命令。每个人都在使用它,却不了解它的作用以及为什么很多时候使用它是错误的。

标签: git clone pull


【解决方案1】:

git clone 是您获取现有存储库的本地副本以进行处理的方式。对于给定的存储库,它通常只使用一次,除非您想拥有它的多个工作副本。 (或者想在弄乱你的本地副本后得到一个干净的副本......)

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

正如您的第一个示例所示,可以使用各种其他 git 命令来模拟 git clone,但实际上 git pullgit clone 做“基本上相同的事情”并非如此(反之亦然) - 反之)。

【讨论】:

  • git clone 所做的具体是什么不是由涉及“git pull”的命令序列完成的?
  • @cmcculloh:没什么——你描述的序列有效地完成了“git clone”的工作。关键是“git pull”被用来做除了你在那里所做的事情之外的各种事情——更不用说“git pull”实际上正是“git fetch; git merge ”。 IOW,如果你真的想的话,你可以不用克隆 pull。此外,您可以从您克隆的存储库以外的存储库中提取。我喜欢将“克隆”视为“让我成为该仓库的本地副本”,而“拉取”则视为“从某个指定的远程获取更新”。
【解决方案2】:

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

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

【讨论】:

  • git fetch --all 设置了额外的远程跟踪分支,所以基本都是一样的。
  • 您可以使用--single-branchclone
【解决方案3】:

用外行的语言我们可以说:

  • 克隆:获取远程存储库的工作副本。
  • Pull:我正在处理这个问题,请把其他人可能会更新的新更改发给我。

【讨论】:

  • 认为你的Pull定义也可以说是Clone
  • 如何处理尚未克隆的东西?
  • 我不明白你的意思?
  • @henrywright 希望,ebneter 的回答将解决您的问题
  • 会“克隆”覆盖我的本地副本吗?
【解决方案4】:

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

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

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

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

通俗地说:

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

【讨论】:

    【解决方案5】:

    克隆小姐:我得到一份新副本到本地。

    Pull 先生:我本地已经有了,我只是更新一下。


    克隆小姐:我可以做你做的!你只是我的子集。

    拉先生:同上!


    克隆小姐:不,你不创造。我就是这样做的:

    1. 在本地计算机中创建空的裸存储库。
    2. 填充远程跟踪分支(repo 中的所有分支都下载到本地计算机)
    3. 不带参数运行 git fetch

    你只做#3,然后你合并,我不需要做(我的是新鲜的)。

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


    克隆小姐:不,亲爱的,你不需要“签出分支”...git checkout 吗?谁来做?我!

    Pull 先生:哦,对了,这是必须的。我需要一个默认分支来执行操作。但是..但是 我对现有的回购有额外的“合并”能力!这使我成为 Git 中最常用的命令;)


    Git 创建者:拉住你的马,如果 --bare 或 --mirror 与 clone 或 init 一起使用,您的合并将不会发生。它仍然是只读的。对于克隆小姐来说,git checkout 可以替换为 git fetch <remote> <srcBranch>:<destBranch>,除非您想使用带有拉取功能的 -s <strategy>,而这在 fetch 中是缺失的。


    Miss Clone:不知何故,我感觉自己已经是赢家了,但也让我放弃吧:我的命令适用于存储库中的所有分支。你是那个心胸开阔的拉先生吗?

    先生。拉:在从 repo 中获取所有分支名称(只是“名称”)时,我心胸宽广。因为我不喜欢获取不必要的分支。但是合并只会发生在当前签出的分支上。排他性就是名字!在你的情况下,你也只签出一个分支。

    Git Creators:仅添加一项:如果需要,克隆小姐可以仅限于一个分支git clone --single-branch --branch <branch name> <url>

    【讨论】:

    • 被低估的答案。
    • 喜欢这种对话风格!
    【解决方案6】:

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

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

    这就是区别。

    Clone 一般用于获取远程 repo 副本。

    拉用于查看其他队友添加的代码,如果您在团队中工作。

    【讨论】:

      【解决方案7】:

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

      git pull 基本上是一个(克隆(下载)+合并)操作,主要用于团队合作。换句话说,当您想要该项目的最新更改时,您可以拉取。

      【讨论】:

        【解决方案8】:

        嗯,当我拉动时看到远程分支“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
        

        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
        

        【讨论】:

        • 我也注意到了这一点,我怀疑随着时间的推移 git 默认值的变化是问题所在。我在 windows 上有 1.9.5.msysgit,在 mac 上有 2.3.2-applegit-55。
        【解决方案9】:

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

        阅读更多:https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        【解决方案10】:

        git clone URL ---> 完整的项目或存储库将作为单独的目录下载。而不仅仅是变化 git pull URL ---> fetch + merge --> 它只会获取已经完成的更改,而不是整个项目

        【讨论】:

          【解决方案11】:

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

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

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

          【讨论】:

            【解决方案12】:

            git clone <remote-url>

            • 创建一个新目录
            • git init // 初始化新仓库
            • git remote add origin <remote-url> // 添加遥控器
            • git fetch // 获取所有远程分支
            • git switch <default_branch> // 切换到默认分支

            git pull

            • 获取所有远程分支
            • 将当前本地分支与跟踪远程分支(不是另一个分支)合并(如果存在本地分支)

            git pull <remote> <branch>

            • 获取远程分支
            • 将当前本地分支与远程分支合并(如果存在本地分支)

            【讨论】:

              猜你喜欢
              • 2020-04-29
              • 2021-08-17
              • 2021-08-03
              • 1970-01-01
              • 2015-04-20
              • 2011-11-10
              • 2011-03-22
              • 2011-05-05
              相关资源
              最近更新 更多