clone和mkdir-> cd-> init-> remote-add-> pull之间有什么区别?

时间:2010-11-05 18:11:18

标签: git dvcs git-clone git-pull

在Github上设置回购后,似乎有两种方法可以将该回购转移到本地回购中。

首先,我可以创建一个目录,初始化一个空白仓库,添加一个遥控器,然后从遥控器中拉出更改。

> 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步版本的快捷方式,还是做其他任何事情?如果我使用一种方法而不是另一种方法,我会遇到困难吗?

1 个答案:

答案 0 :(得分:25)

许多命令,无论是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。这是非常重要的 - 通过你的步骤,如果你签出了主人,你输入git pull,它将不知道该怎么做。

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

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

  • 改变行为有方便的选择。 --shared之类的内容很难添加到列出的命令中。

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