git clone 是什么?
git clone 命令用于从远程仓库(GitHub, GitLab, Gitee 等)下载一个完整的副本(包括所有文件、提交历史和分支)到你的本地机器,这个过程就像你把整个项目的历史记录和所有文件都“复制”了一份到你电脑上。

基本语法
git clone <远程仓库的URL> [本地目录名称]
<远程仓库的URL>: 必需参数,这是你要克隆的远程仓库的地址。[本地目录名称]: 可选参数,如果你指定了这个参数,Git 会在当前目录下创建一个以此命名的文件夹,并将仓库内容下载进去,如果你不指定,Git 会自动从 URL 中提取仓库名称作为本地目录名。
最常用的用法示例
克隆一个公共仓库(最基本用法)
假设你想克隆一个 GitHub 上的公共项目 octocat/Hello-World。
- HTTPS URL:
https://github.com/octocat/Hello-World.git - SSH URL:
git@github.com:octocat/Hello-World.git
命令:
# 使用 HTTPS 克隆 git clone https://github.com/octocat/Hello-World.git # 使用 SSH 克隆 (需要事先配置好 SSH 密钥) git clone git@github.com:octocat/Hello-World.git
执行后:
- 会在当前目录下创建一个名为
Hello-World的文件夹。 - 你进入
Hello-World文件夹后,就已经拥有了这个项目的完整代码和历史记录,并且默认的origin远程仓库和main(或master) 分支都已经设置好了。
克隆到指定的本地目录名
如果你想把仓库克隆到 my-local-project 这个文件夹里,而不是默认的 Hello-World。

命令:
git clone https://github.com/octocat/Hello-World.git my-local-project
执行后:
- 会创建一个名为
my-local-project的文件夹,而不是Hello-World。
常用选项
git clone 支持很多有用的选项,可以通过 git clone --help 查看完整列表,这里介绍几个最常用的:
--branch 或 -b
用于克隆指定的分支,而不是默认的 main 或 master 分支。

场景:远程仓库有多个分支(如 dev, feature),但你只想克隆 dev 分支的内容。
命令:
# 克隆 dev 分支 git clone -b dev https://github.com/user/my-repo.git # 等同于 git clone --branch dev https://github.com/user/my-repo.git
注意:这只会获取指定分支的历史记录,而不是所有分支,如果你需要所有分支,可以配合 --no-single-branch 选项。
--depth
用于进行“浅克隆”,只克隆最近 N 次提交的历史记录,这可以极大地减少克隆时间、节省磁盘空间和网络流量。
场景:你只想快速获取最新代码,不需要完整的项目历史(在 CI/CD 流水线中)。
命令:
# 只克隆最近 1 次提交(最快) git clone --depth 1 https://github.com/user/my-repo.git # 克隆最近 5 次提交 git clone --depth 5 https://github.com/user/my-repo.git
--single-branch (与 --branch 配合使用)
默认情况下,git clone 会获取所有分支的引用(但不会下载所有分支的代码)。--single-branch 选项则只克隆你指定的单个分支,完全不下载其他分支的信息,进一步节省时间和空间。
命令:
# 只克隆 dev 分支,并且不获取其他任何分支信息 git clone --single-branch --branch dev https://github.com/user/my-repo.git
--recurse-submodules
如果你的项目包含 Git 子模块(Submodule),这个选项会在克隆主仓库的同时,自动初始化并更新所有子模块。
场景:项目依赖其他独立的 Git 仓库。
命令:
git clone --recurse-submodules https://github.com/user/my-repo-with-submodules.git
综合示例
假设你需要克隆一个大型项目,但只需要 develop 分支的最新代码,并且不关心完整历史。
git clone \ --single-branch \ --branch develop \ --depth 1 \ https://github.com/user/large-project.git
这条命令的含义是:
git clone: 克隆命令。--single-branch: 只操作单个分支。--branch develop: 指定要克隆的分支是develop。--depth 1: 只获取最近一次提交。URL: 远程仓库地址。
常见问题与解决
Permission denied (publickey).
-
原因:通常在使用 SSH URL 克隆时出现,表示你的本地机器没有配置好用于访问该远程仓库的 SSH 密钥。
-
解决:你需要生成 SSH 密钥,并将其添加到你的 GitHub/GitLab 账户中。
# 生成 SSH 密钥 (一路回车即可) ssh-keygen -t ed25519 -C "your_email@example.com" # 复制公钥内容 (~/.ssh/id_ed25519.pub) cat ~/.ssh/id_ed25519.pub # 将输出的内容粘贴到你的 GitHub/GitLab 的 SSH Keys 设置中
fatal: unable to access 'https://.../': SSL certificate problem: unable to get local issuer certificate
-
原因:通常发生在公司内网或使用代理服务器时,系统的 CA 证书链不完整。
-
解决:可以临时禁用 SSL 证书验证(不推荐,有安全风险)或配置正确的证书路径。
# 临时禁用 (仅用于调试或可信网络) git config --global http.sslVerify false # 或者指定证书路径 git config --global http.sslCAInfo /path/to/your/cacert.pem
克隆速度很慢
- 原因:网络问题、远程服务器在国外、项目历史文件很大。
- 解决:
- 使用国内镜像源(如 Gitee, 阿里云镜像等)。
- 使用 SSH 协议,有时比 HTTPS 快。
- 使用
--depth和--single-branch进行浅克隆。
| 用途 | 命令 |
|---|---|
| 基本克隆 | git clone <URL> |
| 克隆到指定目录 | git clone <URL> <local-dir> |
| 克隆特定分支 | git clone -b <branch-name> <URL> |
| 浅克隆(仅最新提交) | git clone --depth 1 <URL> |
| 克隆特定分支且为浅克隆 | git clone -b <branch-name> --depth 1 <URL> |
| 克隆包含子模块 | git clone --recurse-submodules <URL> |
掌握 git clone 是使用 Git 的第一步,希望这份详细的指南能帮助你更好地理解和使用它!
