296

mkdir repo做(之后和)有什么区别cd 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

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

4

12 回答 12

294

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

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

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

于 2010-09-02T01:09:11.957 回答
143

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

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

于 2010-09-01T17:38:02.513 回答
142

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

  • 克隆:获取远程存储库的工作副本。
  • :我正在努力,请给我可能由其他人更新的新更改。
于 2013-07-17T08:28:34.283 回答
71

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

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

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

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

通俗地说:

git clone正在下载并且git pull正在刷新。

于 2017-12-29T18:20:32.060 回答
24

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

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


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

拉先生:同上!


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

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

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

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


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

拉先生:哦,对了.. 我需要一个已签出的本地分支机构才能采取行动。但是等等..你默认结帐master分支。有人在master分支上工作吗?不!您正在提供一个可能从未使用过的功能!我让用户决定结帐的最佳分支,这就是我的滚动方式!


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


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

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

Git Creators:仅添加一项:如果需要,可以将 Miss Clone 限制为仅一个分支:git clone --single-branch --branch <branch name> <url>

于 2020-01-11T20:20:09.603 回答
12

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

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

这就是区别。

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

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

于 2018-02-19T04:31:42.757 回答
5

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

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

于 2019-01-09T14:09:53.767 回答
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

对比

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
于 2015-08-14T20:57:06.063 回答
2

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

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

于 2016-10-01T10:49:12.763 回答
2

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

于 2019-05-14T09:56:12.400 回答
2

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

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

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

于 2020-05-23T22:58:43.290 回答
2

git clone <remote-url><=>

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

git pull<=>

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

git pull <remote> <branch><=>

  • 获取远程分支
  • 将当前本地分支与远程分支合并(如果存在本地分支)
于 2021-01-15T09:16:07.683 回答