19-git-15-clone

概述

本地创建一个远程仓库的拷贝,git clone命令用于克隆远程分支。

远程仓库

远程仓库相当于本地仓库的上游仓库,两者之间可以相互同步;

可以为本地仓库添加多个远程仓库,同步的时候,指定远程仓库的名称即可。

远程分支

远程分支有一个命名规范 —— 它们的格式是:

  • <remote name>/<branch name>

因此,如果你看到一个名为 o/main 的分支,那么这个分支就叫 main,远程仓库的名称就是 o

大多数的开发人员会将它们主要的远程仓库命名为 origin,并不是 o。这是因为当你用 git clone 某个仓库时,Git 已经帮你把远程仓库的名称设置为 origin

远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这些分支上进行操作的原因, 你必须在别的地方完成你的工作。

命令

从远程主机克隆一个版本库

git clone https://github.com/jquery/jquery.git

从远程主机克隆一个版本库并指定本地目录名

git clone <版本库的网址> <本地目录名>

从远程主机克隆一个版本库并指定主机名

git clone -o jQuery https://github.com/jquery/jquery.git

克隆某个指定分支的代码

git clone -b <branch name> <remote url>

远程跟踪

直接了当地讲,maino/main 的关联关系就是由分支的“remote tracking”属性决定的。main 被设定为跟踪 o/main —— 这意味着为 main 分支指定了推送的目的地以及拉取后合并的目标。

你可能想知道 main 分支上这个属性是怎么被设定的,你并没有用任何命令指定过这个属性呀!好吧, 当你克隆仓库的时候, Git 就自动帮你把这个属性设置好了。

当你克隆时, Git 会为远程仓库中的每个分支在本地仓库中创建一个远程分支(比如 o/main)。然后再创建一个跟踪远程仓库中活动分支的本地分支,默认情况下这个本地分支会被命名为 main

克隆完成后,你会得到一个本地分支(如果没有这个本地分支的话,你的目录就是“空白”的),但是可以查看远程仓库中所有的分支(如果你好奇心很强的话)。这样做对于本地仓库和远程仓库来说,都是最佳选择。

这也解释了为什么会在克隆的时候会看到下面的输出:

local branch "main" set to track remote branch "o/main"

指定远程跟踪

方式一

第一种就是通过远程分支检出一个新的分支,执行:

git checkout -b totallyNotMain o/main

就可以创建一个名为 totallyNotMain 的分支,它跟踪远程分支 o/main

方式二

git branch -u 命令,执行:

git branch -u o/main foo

这样 foo 就会跟踪 o/main 了。如果当前就在 foo 分支上, 还可以省略 foo:

git branch -u o/main