git clone
这里我们将深入研究 git clone
命令。git clone
是一个 Git 命令行实用程序,用于定位现有存储库并创建目标存储库的克隆或副本。在本页中,我们将讨论 git clone
的扩展配置选项和常见用例。我们将在这里介绍一些要点:
- 克隆本地或远程存储库
- 克隆裸存储库
- 使用浅层选项部分克隆存储库
- Git URL 语法和支持的协议
在设置存储库指南中,我们介绍了 git clone
的基本用例。本页将探讨更复杂的克隆和配置方案。
目的:代码存储库到代码存储库协作开发副本
如果已在中央存储库中设置了项目,则 git clone
命令是用户获取开发副本的最常用方式。像 git init
一样,克隆通常是一次性操作。开发人员获得工作副本后,所有版本控制操作和协作都将通过其本地存储库进行管理。
代码存储库到代码存储库协作
相关资料
Git 分支
查看解决方案
了解 Bitbucket Cloud 的 Git
使用
git clone
主要用于指向现有代码存储库,并在另一个位置的新目录中克隆或复制该代码存储库。原始存储库可以位于本地文件系统上,也可以位于远程计算机可访问的支持协议上。git clone
命令复制现有的 Git 存储库。这有点像 SVN 签出,只是“工作副本”是一个成熟的 Git 存储库——它有自己的历史记录,管理自己的文件,是一个与原始存储库完全隔离的环境。
为方便起见,克隆会自动创建一个名为 "origin" 的远程连接,该连接指向原始存储库。这使得与中央存储库交互变得非常容易。这种自动连接是通过在 refs/remotes/origin
下创建指向远程分支头的 Git 引用以及初始化 remote.origin.url
和 remote.origin.fetch
配置变量来建立的。
使用 git clone
的示例可以在设置存储库指南中找到。下方示例演示了如何使用 SSH 用户名 john 获取存储在 example.com
可访问服务器上的中央存储库的本地副本:
git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# Start working on the project
第一条命令在本地计算机上的 my-project
文件夹中初始化一个新的 Git 存储库,并使用中央存储库的内容填充该存储库。然后,您可以 cd 进入项目并开始编辑文件、提交快照以及与其他存储库进行交互。还要注意的是,克隆的存储库中省略了 .git
扩展。这反映了本地副本的非裸露状态。
克隆到特定文件夹
git clone <repo> <directory>
将位于 <repo>
的存储库克隆到本地计算机上名为 ~<directory>!
的文件夹中。
克隆特定标记
git clone --branch <tag> <repo>
克隆位于 <repo>
的存储库,并仅克隆 <tag>
的引用。
浅层克隆
git clone -depth=1 <repo>
克隆位于 <repo>
的存储库并仅克隆 由 depth=1 选项指定的提交历史记录。在此示例中,对 <repo>
进行了克隆,并且新克隆的代码存储库中仅包含最新的提交。浅层克隆在处理具有大量提交历史记录的代码存储库时最有用。大量提交历史记录可能会导致扩展问题,例如磁盘空间使用限制和克隆时等待时间长。浅层克隆可以帮助缓解这些扩展问题。
配置选项
git clone -branch
-branch
参数允许您指定要克隆的特定分支,而不是远程 HEAD
指向的分支,通常是主分支。此外,您可以传递标记而不是分支来获得同样的效果。
git clone --branch
git clone -mirror vs. git clone -bare
git clone --bare
与 git init --bare
类似,将 -bare
参数传递给 git clone
时,将使用省略的工作目录创建远程存储库的副本。这意味着将建立一个存储库,其中包含可以推送和拉取的项目历史记录,但不能直接编辑。此外,不会使用 -bare
存储库为该代码存储库配置任何远程分支。与 git init --bare
一样,它用于创建开发人员不会直接编辑的托管存储库。
git clone --mirror
传递 --mirror
参数也会隐式传递 --bare
参数。这意味着 --bare
的行为由 --mirror
继承。导致一个没有可编辑工作文件的裸代码存储库。此外,--mirror
将克隆远程存储库的所有扩展引用,并维护远程分支跟踪配置。然后您可以在镜像上运行 git remote
更新,它将覆盖原始代码存储库中的所有引用。为您提供精确的‘镜像’功能。
其他配置选项
有关其他 git clone 选项的完整列表,请访问官方 Git 文档。在本文档中,我们将介绍其他一些常用选项。
git clone --template
git clone --template=<template_directory> <repo location>
在 <repo location>
处克隆代码存储库,并将 <template directory>
中的模板应用到新创建的本地分支。有关 Git 模板的详尽参考,可以在我们的 git init 页面上找到。
Git 网址
Git 有自己的网址语法,用于将远程存储库位置传递给 Git 命令。由于 git clone
最常用于远程存储库,因此我们将在此处研究 Git 网址语法。
Git 网址协议
'-SSH
安全 Shell (SSH) 是一种使用非常普遍且经过身份验证的网络协议,通常在大多数服务器上默认配置。由于 SSH 是一种经过身份验证的协议,因此您需要在连接之前与托管服务器建立凭据。ssh://[user@]host.xz[:port]/path/to/repo.git/
'- GIT
git 独有的协议。Git 附带了一个在端口 (9418) 上运行的守护进程。该协议与 SSH 类似,但它没有身份验证。git://host.xz[:port]/path/to/repo.git/
'- HTTP
超文本传输协议。网页协议,最常用于通过互联网传输网页 HTML 数据。Git 可配置为通过 HTTP http[s]://host.xz[:port]/path/to/repo.git/
进行通信
摘要
在本文档中,我们深入研究了 git clone
。最重要的收获是:
1. git clone
用于创建目标代码存储库的副本
2. 目标代码存储库可以是本地的也可以是远程的
3. Git 支持一些网络协议来连接到远程代码存储库
4. 有许多不同的配置选项可以变更克隆的内容
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。