教程 > Git 教程 > Git 创建仓库 阅读:2727

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 提交到另一个仓库。

Svn 中央仓库模型
Svn 中央仓库模型

GIt-分布式仓库模型
GIt-分布式仓库模型

当然,我们可以赋予某些 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/

查看笔记

扫码一下
查看教程更方便