26

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

4

1 回答 1

27

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

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

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

  • git pull不会创建任何远程分支。如果远程有多个分支,则克隆会在您的存储库中创建远程分支remotes/origin/foo, remotes/origin/bar, ...。Agit 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 已经知道了。

于 2010-11-05T18:30:17.940 回答