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

Rup*_*ott 26 git dvcs git-pull git-clone

在Github上设置回购后,似乎有两种方法可以将该回购转换为本地回购.

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

> mkdir "exampleProject"
> cd "exampleProject"
> git init
> git remote add origin git@github.com:exampleUser/exampleProject.git
> git pull origin master
Run Code Online (Sandbox Code Playgroud)

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

> git clone git@github.com:exampleUser/exampleProject.git
Run Code Online (Sandbox Code Playgroud)

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

Cas*_*bel 26

许多命令,无论是git命令还是常见程序,都可以在一行中完成,否则你可以在十行中执行.保存工作总是好的!

也就是说,你的步骤接近但不完全相同git clone.我可以想到一些差异,与分支有关:

  • 如果由于某种原因,遥控器的HEAD 不是主机,那么克隆将做正确的事情 - 给你一个与遥控器相同的分支,而不是主机.这很少见,但要注意一个很好的细节.

  • git pull不会创建任何远程分支.如果远程拥有多个分支,克隆创建远程分支remotes/origin/foo,remotes/origin/bar......在你的资料库.A 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已经知道了.