跳过导航,直达内容

第5章:下载代码(Clone & Download)📥

看到喜欢的开源项目,当然要下载来研究!本章介绍三种下载代码的方式。

📋 目录


三种下载方式对比

方式 难度 能否同步更新 适用场景
Download ZIP ⭐ 最简单 ❌ 不能 快速查看代码,不需要修改
Git Clone ⭐⭐ 中等 ✅ 能 长期学习、修改代码、贡献开源
GitHub CLI ⭐⭐⭐ 进阶 ✅ 能 频繁操作 GitHub,需要自动化

方式1:Download ZIP(最简单)⭐

适用场景

操作步骤

第1步:进入仓库主页

打开浏览器 → 访问 https://github.com/GTX950L/github-encyclopedia

第2步:点击绿色的 Code 按钮

┌─────────────────────┐
│ 📁 Code  ▼          │  ← 点击这个按钮
└─────────────────────┘

第3步:选择 Download ZIP

弹出的菜单:
┌────────────────────────────────────┐
│ 🔗 Clone with HTTPS                │
│ 🔑 Clone with SSH                  │
│ 📱 Open with GitHub Desktop        │
│ 📦 Download ZIP  💾               │  ← 点击这个
│ 💻 Open with GitHub Codespaces    │
└────────────────────────────────────┘

第4步:解压 ZIP 文件

# 下载完成后,解压文件
unzip 仓库名-main.zip
cd 仓库名-main

优缺点

优点 缺点
✅ 不需要安装 Git ❌ 不能同步原仓库的更新
✅ 操作简单 ❌ 不能提交修改
✅ 适合新手 ❌ 浪费存储空间(重复下载)

方式2:Git Clone(最常用)⭐⭐

前置条件

需要先安装 Git:

# 检查是否安装了 Git
git --version

# 如果没有,去官网下载安装
# https://git-scm.com/

操作步骤

步骤1:复制仓库地址

方法A:HTTPS 地址(推荐新手)

1. 点击绿色的 Code 按钮
2. 选择 Clone with HTTPS
3. 点击复制按钮(📋)复制地址

地址格式:
https://github.com/GTX950L/github-encyclopedia.git

方法B:SSH 地址(推荐熟手)

1. 点击绿色的 Code 按钮
2. 选择 Clone with SSH
3. 点击复制按钮

地址格式:
git@github.com:GTX950L/github-encyclopedia.git

💡 区别:

  • HTTPS:每次操作需要输入用户名和密码(或 Token)
  • SSH:配置一次 SSH Key 后,无需再输入密码(更安全、更方便)

步骤2:执行 clone 命令

打开终端(命令行),执行:

# 基本格式
git clone 仓库地址

# 示例:克隆一个开源项目
git clone https://github.com/torvalds/linux.git

# 克隆到指定目录
git clone https://github.com/GTX950L/github-encyclopedia.git 我的目录名

步骤3:进入项目目录

cd 仓库名

# 查看项目结构
ls -la  # macOS/Linux
dir      # Windows

同步原仓库的更新

如果你 Fork 了一个项目,或者原仓库有更新,可以同步:

# 1. 查看远程仓库
git remote -v

# 2. 添加原仓库为 upstream(只需执行一次)
git remote add upstream https://github.com/原作者/仓库名.git

# 3. 拉取原仓库的更新
git fetch upstream

# 4. 合并更新到你的分支
git merge upstream/main

方式3:GitHub CLI(最强大)⭐⭐⭐

什么是 GitHub CLI?

GitHub CLI(gh)是 GitHub 官方提供的命令行工具,让你可以:

安装 GitHub CLI

macOS

# 使用 Homebrew
brew install gh

# 验证安装
gh --version

Windows

# 使用 Winget
winget install GitHub.cli

# 或使用 Chocolatey
choco install gh

Linux

# Ubuntu/Debian
sudo apt install gh

# Fedora
sudo dnf install gh

首次使用:登录 GitHub

# 登录命令
gh auth login

# 会问你一系列问题:
# 1. 要登录 GitHub.com 还是 GitHub Enterprise?→ 选择 GitHub.com
# 2. 想用 HTTPS 还是 SSH?→ 推荐 SSH(更安全)
# 3. 想用浏览器登录还是 Token?→ 推荐浏览器(最简单)

使用 gh 克隆仓库

# 基本格式
gh repo clone GTX950L/github-encyclopedia

# 示例
gh repo clone torvalds/linux

# 克隆到当前目录
gh repo clone GTX950L/github-encyclopedia --  # 注意末尾的 --

# 只克隆最新版本(不克隆历史记录,速度更快)
gh repo clone GTX950L/github-encyclopedia -- --depth 1

gh 的其他强大功能

# 创建 Issue
gh issue create --title "Bug报告" --body "详细描述"

# 查看 PR 列表
gh pr list

# 创建 PR
gh pr create --title "新功能" --body "说明"

# 克隆你自己的所有仓库
gh repo list --limit 1000 | while read -r repo _; do
    gh repo clone "$repo"
done

如何选择合适的下载方式

决策树

你想下载代码吗?
│
├─ 只想快速看看代码,不需要修改?
│   └─ 使用 Download ZIP ✅
│
├─ 想学习、修改代码,并可能贡献开源?
│   └─ 使用 Git Clone ✅
│
└─ 频繁操作 GitHub,需要自动化?
    └─ 使用 GitHub CLI ✅

实际场景推荐

场景 推荐方式 理由
上课学习某个开源项目 Download ZIP 快速,不需要 Git
准备给开源项目提交 PR Git Clone 需要提交修改
管理自己的多个仓库 GitHub CLI 批量操作更方便
在公司内网环境 Git Clone (HTTPS) 通常 SSH 端口被封

下载后的操作

1️⃣ 查看项目结构

# 查看文件列表
ls -la

# 查看项目说明文件(很重要!)
cat README.md

# 查看项目许可证
cat LICENSE

# 查看依赖文件(如果是 Node.js 项目)
cat package.json

2️⃣ 安装依赖

不同语言的项目有不同的依赖管理:

Python 项目

# 查看是否有 requirements.txt
cat requirements.txt

# 安装依赖
pip install -r requirements.txt

# 或者使用虚拟环境(推荐)
python -m venv venv
source venv/bin/activate  # macOS/Linux
venv\Scripts\activate     # Windows
pip install -r requirements.txt

Node.js 项目

# 查看 package.json
cat package.json

# 安装依赖
npm install

# 或者使用 yarn
yarn install

Java 项目

# 如果使用 Maven
mvn install

# 如果使用 Gradle
gradle build

3️⃣ 运行项目

# 查看 README.md,通常会有运行说明

# 示例:运行一个 Python 项目
python main.py

# 示例:运行一个 Node.js 项目
npm start

# 示例:运行一个 Java 项目
java -jar target/项目名.jar

常见问题

Q1: clone 很慢怎么办?

A: 有几种方法可以加速:

方法1:使用国内镜像

# 将 github.com 替换为镜像地址
git clone https://github.com/GTX950L/github-encyclopedia.git
# 改为:
git clone https://hub.fastgit.xyz/GTX950L/github-encyclopedia.git

⚠️ 注意:镜像站点可能不是官方运营,请勿用于敏感项目。

方法2:只克隆最新版本

# 不克隆完整历史记录,只克隆最新版本
git clone --depth 1 https://github.com/GTX950L/github-encyclopedia.git

方法3:使用代理

# 配置 Git 使用代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

Q2: 下载的代码如何更新到最新版本?

A: 如果你是用 git clone 下载的,可以:

# 进入项目目录
cd 仓库名

# 拉取最新代码
git pull origin main

如果你是用 Download ZIP 下载的,只能重新下载。

Q3: 我可以下载私有仓库吗?

A: 可以,但需要权限:

⚠️ 注意:GitHub 已于 2021 年 8 月移除「把 Token 直接拼进克隆 URL」的认证方式。正确做法是使用凭据管理器或 gh 命令行工具,Token 不会出现在命令历史中,更安全。

# 推荐方式1:GitHub CLI(会自动弹出浏览器授权,无需手动输入 Token)
gh auth login
git clone https://github.com/GTX950L/github-encyclopedia.git

# 推荐方式2:Windows/macOS 凭据管理器
# 首次 git push/clone 时会自动弹出窗口输入 Token,之后自动记住

Q4: fork 和 clone 有什么区别?

操作 作用 位置
Fork 复制别人的仓库到你的 GitHub 账号 GitHub 云端
Clone 下载仓库到你的本地电脑 本地电脑

典型流程:

  1. Fork 别人的仓库(在 GitHub 上复制一份)
  2. Clone 你 Fork 的仓库(下载到本地)
  3. 修改代码
  4. Push 到你的 Fork
  5. 提交 PR 到原仓库

Q5: 下载的代码可以商用吗?

A: 取决于项目的开源协议(LICENSE 文件):

协议 可以商用吗? 需要注明作者吗?
MIT ✅ 可以 ✅ 需要
GPL ✅ 可以 ✅ 需要,且你的代码也要开源
Apache 2.0 ✅ 可以 ✅ 需要
没有 LICENSE ❌ 不可以(默认版权保护) -

💡 建议:使用前一定要查看 LICENSE 文件!


Q6: 我只想下载仓库中的某个目录,可以吗?

A: ✅ 可以! 使用 sparse-checkout(稀疏检出)。

适用场景:

# 第1步:不带文件地克隆
git clone --no-checkout https://github.com/GTX950L/github-encyclopedia.git
cd 仓库名

# 第2步:启用 sparse-checkout
git sparse-checkout init --cone

# 第3步:指定你要的目录
git sparse-checkout set src/ docs/

# 第4步:检出文件
git checkout main

💡 这样只会下载 src/ 和 docs/ 两个目录,其他文件不会下载到本地。


Q7: 仓库里有大文件,不想每次都下载怎么办?

A: 使用 Git LFS(Large File Storage)。

Git LFS 是 Git 的扩展,专门解决二进制大文件的版本管理问题。

Git 管理大文件的痛点

Git 对文本文件(源代码)管理极好,但对二进制大文件效率极低——每次修改都会保存完整副本,导致:

Git LFS 的工作原理

传统 Git:  [.psd v1] [.psd v2] [.psd v3]  ← 每次修改都存完整文件
                                            ← 仓库爆炸式增长

Git LFS:   [指针 v1] [指针 v2] [指针 v3]   ← 仓库中只存指针(几十字节)
              ↓         ↓         ↓
            [LFS 服务器]                   ← 真正的大文件存远程

在 Git 仓库中只存指针文件,大文件实际内容存储在远程 LFS 服务器,按需下载。

安装 Git LFS

# Windows(Git for Windows 已内置 Git LFS)
git lfs install    # 运行一次即可

# 验证安装
git lfs version    # 输出示例:git-lfs/3.4.0

macOS: brew install git-lfs
Linux: sudo apt install git-lfs(Ubuntu) / sudo dnf install git-lfs(Fedora)

基本使用流程

# 第1步:告诉 LFS 要管理哪些文件类型
git lfs track "*.psd"          # 所有 .psd 文件
git lfs track "*.zip"          # 所有 .zip 文件
git lfs track "assets/**"      # assets 目录下所有文件
git lfs track "*.bin" --filename  # 单个文件

# 第2步:提交 .gitattributes(追踪规则文件)
git add .gitattributes
git commit -m "配置 Git LFS 追踪规则"

# 第3步:像平常一样 add/commit/push
git add design.psd
git commit -m "添加设计稿"
git push origin main   # LFS 文件会自动上传到服务器

查看和管理 LFS 文件

git lfs track          # 查看当前追踪规则
git lfs ls-files       # 列出仓库中由 LFS 管理的文件
git lfs pull           # 拉取 LFS 文件(clone 后需单独执行)
git lfs prune          # 清理本地缓存的旧版本 LFS 文件

克隆包含 LFS 文件的仓库

# 方式1:普通 clone + 拉取 LFS
git clone https://github.com/GTX950L/github-encyclopedia.git
cd 仓库名
git lfs pull                    # 拉取 LFS 管理的文件

# 方式2:clone 时自动拉取 LFS
GIT_LFS_SKIP_SMUDGE=0 git clone https://github.com/GTX950L/github-encyclopedia.git

# 方式3:跳过 LFS 文件(只下载指针,适合只想看代码)
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/GTX950L/github-encyclopedia.git
git lfs pull --include="*.psd"  # 按需下载具体类型

历史仓库迁移

已有仓库想将大文件迁移到 LFS:

# 迁移所有 .psd 文件(包括历史提交)
git lfs migrate import --include="*.psd" --everything

# 迁移所有大于 100MB 的文件
git lfs migrate import --above="100MB" --everything

# 查看迁移后节省的空间
git lfs migrate info --everything

⚠️ 警告:迁移会重写 Git 历史(改变提交 SHA),需要团队协调后执行。迁移前最好创建备份。

GitHub LFS 配额

计划 LFS 存储空间 单文件限制
Free 1 GB ≤ 2 GB
Pro 2 GB ≤ 2 GB
Team 50 GB ≤ 2 GB
Enterprise 100 GB+ ≤ 2 GB

超出可购买额外存储包($5/月 50GB)。

适用场景

适合 LFS 不适合 LFS
设计稿(PSD/AI/Sketch) 源代码文件
图片/视频素材 小型配置文件
数据集/模型文件 文本/日志文件
二进制安装包 频繁变更的小文件

📝 实战练习

练习1:下载你的第一个开源项目

任务:

  1. 找一个你感兴趣的开源项目(比如 Vue.js)
  2. 用三种方式分别下载
  3. 对比文件大小和下载时间

练习2:同步原仓库的更新

任务:

  1. Fork 一个项目
  2. Clone 你的 Fork 到本地
  3. 配置 upstream
  4. 拉取原仓库的更新

练习3:使用 GitHub CLI

任务:

  1. 安装 GitHub CLI
  2. 登录你的账号
  3. 用 gh 命令克隆一个仓库
  4. 用 gh 命令查看你的所有仓库

📚 延伸阅读


📝 本章小结

你现在学会了:

下一步学习


← 返回目录  |  ← 上一章  |  下一章 →