【问题标题】:What is the difference between clone and mkdir->cd->init->remote-add->pull?clone 和 mkdir->cd->init->remote-add->pull 有什么区别?
【发布时间】:2011-05-05 18:12:56
【问题描述】:

在 Github 上设置 repo 后,似乎有两种方法可以将该 repo 拉入本地 repo。

首先,我可以创建一个目录,初始化一个空白仓库,添加一个远程,然后从远程拉取更改。

> mkdir "exampleProject"
> cd "exampleProject"
> git init
> git remote add origin git@github.com:exampleUser/exampleProject.git
> git pull origin master

其次,我可以克隆遥控器。

> git clone git@github.com:exampleUser/exampleProject.git

克隆只是上述 5 步版本的快捷方式,还是还有其他功能?如果我使用一种方法而不是另一种方法,我会遇到困难吗?

【问题讨论】:

  • 我很确定它是一样的。他们都创建了 repo 的副本。

标签: git dvcs git-clone git-pull


【解决方案1】:

很多命令,无论是 git 命令还是普通程序,都可以在一行中完成,否则十行就可以完成。节省工作总是好的!

也就是说,您的步骤与git clone 所做的很接近,但并不完全相同。我能想到一些不同之处,都与分支有关:

  • 如果由于某种原因,远程的 HEAD 不是主控,则克隆会做正确的事情 - 给您一个与远程的名称相同的分支,而不是主控。这种情况很少见,但需要注意一个很好的细节。

  • 您的git pull 不会创建任何远程分支。如果远程有多个分支,则克隆会在您的存储库中创建远程分支remotes/origin/fooremotes/origin/bar、...。 git fetch origin 会在您列出的步骤中解决这个问题。

  • 您还没有设置您的主分支来跟踪来源,而克隆会这样做。您可以将其添加到您列出的步骤中作为git config branch.master.remote origin; git config branch.master.merge refs/heads/master。这是非常重要的——按照你的步骤,如果你有 master 签出并且你输入 git pull,它不会知道该怎么做。

我可能错过了一两件事。至于困难,即使假设您消除了默认克隆和“手动克隆”之间的所有差异,我的建议是不要重新发明git clone

  • 很短。为什么要做更多的工作?

  • 它有很多方便的选项来改变它的行为。像--shared 这样的东西真的很难添加到您列出的命令中。

  • 保证现在和将来做正确的事。如果你错过了一个细节,比如上面的那些?如果 git 添加了一个影响克隆的全局配置参数怎么办?您必须更改命令才能将其考虑在内,但 git clone 已经知道了。

【讨论】:

  • 感谢您的回答!这很有帮助。我问的原因不是因为我想重新发明克隆,而是要确切地了解它在做什么,但是您的建议非常有效。
  • @Rupert:啊,酷。我认为是您首先列出了手动方法,这让我认为您正在考虑使用它。
  • @Jefromi:使用这两个git config 命令执行您正在执行的操作的另一种方法是:git branch --set-upstream master origin/master 这将相同的[branch "master"] 部分添加到.git/config 文件。就像 git branch --track master origin/master 一样,除非你在本地已经存在 master 分支时使用它。
猜你喜欢
  • 2011-06-18
  • 2020-04-29
  • 2011-04-06
  • 2021-08-17
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多