首页/开发/Git 与协作速查/git clone 克隆仓库
Git 基础与命令88 条

git clone 克隆仓库

把远端仓库复制到本地:自动配置 origin、拉取默认分支并建立跟踪关系,支持指定分支、目录名与子模块递归。

Git 与协作速查开发更新于 2026-10-13

git clone 是什么

git clone 把远端仓库完整复制到本地:取回全部提交历史、建立名为 origin 的远端、检出默认分支,并让本地分支跟踪远端同名分支。它是获取代码的第一步,克隆完成后日常同步改用 git pull 或 git fetch,不需要反复克隆。地址支持 HTTPS、SSH、本地路径与 git 协议四种写法。

克隆实际做了哪几步

一次 clone 等价于初始化仓库、添加远端、取回对象与引用、检出默认分支并建立跟踪这四步动作的组合。明白这一点,就能理解 clone 的参数大多是在覆盖这几步的默认行为:-b 改检出哪条分支,--depth 改取回多少数据,--recurse-submodules 追加一步初始化子模块。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git clone [选项] <仓库地址> [目标目录]
地址形式https://、git@host:path、git://、本地路径
认证方式HTTPS 走凭据助手,SSH 走密钥
常用选项-b 指定分支;--depth 浅克隆;--recurse-submodules 拉子模块

典型使用场景

  • 接手项目:第一次把代码拉到本地,克隆后即可构建运行
  • 并行开发:同一仓库克隆到不同目录,互不干扰
  • 只取维护分支:用 -b release/2.x 直接检出长期分支
  • 含子模块的项目:加 --recurse-submodules 一次拉齐依赖代码
  • CI 优化:用 --depth 1 只取最新提交,缩短流水线耗时
  • 做镜像或备份:用 --mirror 复制包含全部引用的裸仓库

常用示例

常用示例
git clone https://github.com/org/repo.git              # 默认克隆到 repo 目录
git clone git@github.com:org/repo.git mydir             # SSH 地址并指定目录名
git clone -b release/2.x https://example.com/org/repo.git   # 直接检出指定分支
git clone --recurse-submodules https://example.com/org/repo.git  # 连子模块一起拉
git clone --depth 1 https://example.com/org/repo.git    # 只要最新一次提交
git clone --mirror https://example.com/org/repo.git     # 裸仓库镜像,可用于备份
git remote -v                                           # 克隆后核对 origin 地址
git branch -vv                                          # 核对本地分支的跟踪关系

克隆产生哪些东西

产物说明怎么核对
origin 远端自动指向克隆来源地址git remote -v
默认分支按远端 HEAD 检出到工作区git branch --show-current
远端跟踪分支origin/main 等只读镜像引用git branch -r
跟踪关系本地 main 跟踪 origin/maingit branch -vv
完整历史含全部提交、标签与分支引用git log --oneline | head
子模块仅在使用递归选项时初始化git submodule status
浅克隆只有最近若干条提交git rev-parse --is-shallow-repository
镜像仓库--mirror 时全部引用都存在本地git remote -v 看 fetch 与 push 地址
clone 是一次性取回全部历史的动作。之后同步用 git pull,或者先 fetch 再人工决定合并方式,不要在原有仓库上再克隆一份。
把仓库克隆到另一个仓库目录内部会形成嵌套仓库,外层提交时可能把内层当成普通目录收录,生成没有内容的 gitlink,删除前先想清楚归属。
仓库很大时克隆断线重试会从头开始。可先用 --depth 1 拿到可用的基线,需要追溯历史时再用 git fetch --unshallow 补全为完整仓库。

浅克隆与子模块的取舍

仓库体积大时,--depth 1 只取最新一次提交的快照,克隆时间与磁盘占用都明显下降,代价是历史不完整:git log、git blame、git bisect 都会受限,合并到旧基线也可能失败。含子模块的项目必须额外加 --recurse-submodules,否则子目录是空的,构建会直接失败。两个选项可以叠加使用,但在需要追溯历史之前要先把数据补齐。

克隆完成后先用 git remote -v 与 git branch -vv 核对 origin 地址和跟踪关系,再开始改动,能避免把提交推到错误的远端或错误的分支上。
远端删除的分支不会自动从本地消失,定期 git fetch --prune 清理远端跟踪引用,可以让 git branch -r 与日志展示保持干净。
克隆是只读拉取,不会改动远端。若只需要查阅而不打算提交,克隆到临时目录即可,不必关心本地分支与上游的跟踪关系。

易错点

  • 嵌套克隆:仓库目录里再克隆一份,外层会把它当作普通目录提交,形成空的 gitlink 记录
  • HTTPS 反复提示输入口令,通常是凭据助手未配置或令牌过期,改用 SSH 密钥或更新令牌
  • 克隆进非空目录会直接失败,需要合并内容时先克隆到空目录再复制过去
  • 只克隆单个分支后再想切换到其他分支会提示分支不存在,需用 git remote set-branches 调整获取范围后再 fetch

数据来源与参考

  • Git 官方文档:git-clone
  • Pro Git 2nd Edition · 2.1 取得 Git 仓库
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌