概述
在本地创建一个远程仓库的拷贝,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>
远程跟踪
直接了当地讲,main
和 o/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