git中pull和clone的区别是什么?

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

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

300006 次浏览

它们基本上是一样的,除了克隆会设置额外的远程跟踪分支,而不仅仅是master。查看手册页:

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

git clone是获取现有存储库的本地副本的方法。对于给定的存储库,它通常只使用一次,除非您希望它有多个工作副本。(或者在搞砸了本地的拷贝后,想要一份干净的拷贝…)

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

正如你的第一个例子所示,可以用其他git命令的分类来模拟git clone,但实际上并不是git pullgit clone做“基本上相同的事情”(反之亦然)。

用外行的话来说,我们可以说:

  • 克隆:获取远程存储库的工作副本。
  • :我正在为此工作,请让我可能由其他人更新的新变化。

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

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

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

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

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

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

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

通俗来说:

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

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

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

这就是区别。

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

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

git克隆用于下载当前在远程服务器存储库上工作的内容,并将其保存在项目所在的机器文件夹中。 大多数情况下,它只在我们第一次上传项目时使用。

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

完整的项目或存储库将作为一个单独的目录下载。不仅仅是变化 它将只获取已经完成的更改,而不是整个项目

克隆小姐:我得到一个新的拷贝到本地。

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


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

拉先生:我也是!


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

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

你只需要执行#3,然后合并(fetch + merge),我不需要这样做。我的是新鲜的……女孩!

拉先生:自作聪明,没什么大不了的,我会做一个“git init”。先!那么我们是一样的。


克隆小姐:不,亲爱的,难道你不需要一个“结帐分支”吗?git checkout吗?谁来做这件事?我!

拉先生:哦,对了。我需要一家已结帐的本地分行来采取行动。但是等等. .你默认签出master分支。有人在主分支上工作吗?不!您正在交付一个可能从未使用过的特性!我让用户决定最好的分支结帐,这就是我的滚动!🤘


Git创建者:Pull先生,请耐心等待,如果——bare或——mirror与clone或init一起使用,您的合并将不会发生。它保持只读。对于克隆小姐,git checkout可以用git fetch <remote> <srcBranch>:<destBranch>替换,除非你想使用带有pull的-s <strategy>,它在fetch中缺失。


克隆小姐:不知怎的,我觉得我已经是赢家了,但让我把这个也丢掉:我的命令适用于存储库中的所有分支。你是心胸开阔的拉先生吗?

Pull先生:在从回购中获取所有分支名称(只是“名称”)时,我的思路比较开阔。因为我不喜欢获取不必要的分支。但是合并只会发生在当前签出的分支上。独家就是这个名字!在您的情况下,您也只签出一个分支。

Git创建者:只增加了一个:如果需要,Miss Clone可以限制为一个分支:git clone --single-branch --branch <branch name> <url>

克隆-:它将在您的本地机器上创建您的远程存储库项目的完全重复的副本。

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

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

git clone <remote-url> & lt; =比;

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

git pull & lt; =比;

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

git pull <remote> <branch> & lt; =比;

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