Git clone 克隆远程仓库
本章节我们将深入研究git clone命令。git clone是一个 Git 命令行实用程序,用于将仓库库克隆到新创建的目录中,为克隆仓库中的每个分支创建远程跟踪分支。
在该章节中,我们讨论git clone
的以下几个方面的内容
- 克隆本地或远程存储库
- 克隆一个裸仓库
- 使用浅层选项来部分克隆存储库
- Git URL 语法和支持的协议
在 Git 仓库概述及创建一个仓库 一节中,我们简单的介绍了 git clone 的用法。本篇我们将探讨更复杂的克隆和配置选项。
Git Clone 作用
如果项目已在中央仓库中,则git clone
命令是用户获取开发副本的最常见方式。就像git init
,克隆通常是一次性操作。开发人员获得工作副本后,所有版本控制操作和协作都通过其本地仓库进行管理。
Repo-to-repo 协作
我们要清楚一点, Git 的“工作副本”的与通过从 SVN 仓库中检出代码获得的工作副本非常不同,理解这一点很重要。与 SVN 不同,Git 不区分工作副本和中央仓库。
这使得与 Git 的协作方式与 SVN 的协作有着根本的不同。SVN 依赖于中央仓库和工作副本之间的关系,而 Git 的协作模型基于仓库到仓库的交互。不是将工作副本检入 SVN 的中央仓库,而是将一个仓库的 push 或 pull 提交到另一个仓库。
当然,我们可以赋予某些 Git 仓库特殊含义。例如,只需将一个 Git 仓库指定为“中央”仓库,就可以使用 Git复制中央仓库的工作流。关键是,这是通过约定实现的,而不是硬连接到 VCS 本身。
用法
git clone主要用于指向现有的仓库,并在另一个新目录中创建该仓库的克隆副本。原始仓库可以位于本地文件系统上,也可以位于支持协议的远程计算机上。git clone命令复制现有git仓库。这有点像SVN签出,只是“工作副本”是一个完整的Git仓库,它有自己的历史记录,管理自己的文件,并且是一个与原始仓库完全隔离的环境。
为方便起见,克隆会自动创建一个名为“origin”
的远程连接,指向原始仓库。这使得与中央仓库交互变得非常容易。这种自动链接是通过在refs/remotes/origin下创建到远程分支头的Git ref,并初始化remote.origin.url和remote.origin.fetch配置变量来建立的。
简单示例如下
$ git clone https://github.com/onmpw/marked.git
上面命令会在本地机器上新建一个marked
文件夹并将其初始化为一个新的 Git 仓库,然后用中央仓库的内容对其进行填充。
注意
,克隆的存储库中省略了扩展名 .git。这反应了本地副本是非裸状态。
克隆到特定文件夹
git clone <repo> <directory>
将位于<repo>
的仓库克隆到本地计算机的<directory>
文件夹中。
$ git clone https://github.com/onmpw/marked.git /root/workspace/jiyik_marked
克隆特定标签
git clone --branch <tag> <repo>
克隆仓库<repo>
并且只克隆该仓库的标签<tag>
的内容。
克隆特定分支
克隆特定的分支同样也是用 --branch
选项来完成
$ git clone -branch jiyik_dev git://remoterepository.git
上面的示例将仅克隆远程 Git 存储库中的分支 jiyik_dev。这样真的很方便,可以节省我们下载HEAD仓库引用的时间,然后还必须另外获取所需的引用。
Git URL 协议
Git 支持 ssh,git,http 和 https 协议(此外,可以使用 ftp 和 ftps 进行抓取,但这效率低下且不建议使用;请勿使用)。
本地传输(即 git:// URL)不进行身份验证,在不安全的网络上应谨慎使用。
以下是上述几个传输协议的格式:
ssh://[user@]host.xz[:port]/path/to/repo.git/
git://host.xz[:port]/path/to/repo.git/
http[s]://host.xz[:port]/path/to/repo.git/
ftp[s]://host.xz[:port]/path/to/repo.git/
ssh 协议也可以使用类似 scp 的语法:
[user@]host.xz:path/to/repo.git/