medias 目录下的视频文件太大,提交到git上时如何特殊配置?
当 medias 目录下的视频文件太大(如 >100MB),直接提交到 Git 会遇到以下问题:
- GitHub/GitLab 等平台通常限制单文件 ≤100MB(GitHub 超过 50MB 就警告,100MB 拒绝推送);
- 即使平台允许,大文件也会拖慢 clone/pull 速度,膨胀仓库历史;
- Git 本身不适合存储二进制大文件(无法高效 diff)。
✅ 正确做法:使用 Git LFS(Large File Storage)
Git LFS 是官方推荐的解决方案,用指针文件代替真实大文件存入 Git 历史,真实文件存储在 LFS 服务器(GitHub/GitLab/Bitbucket 均原生支持)。
🔧 配置步骤(以 GitHub 为例)
1. 安装 Git LFS
- 官网下载:https://git-lfs.com
- 或命令行安装:
# macOS brew install git-lfs # Windows (Scoop) scoop install git-lfs # Ubuntu/Debian sudo apt-get install git-lfs
2. 在仓库中初始化 LFS
cd your-repo
git lfs install # 全局只需一次,仓库内可省略
3. 跟踪 medias 目录下所有视频文件
# 跟踪特定扩展名(推荐)
git lfs track "*.mp4"
git lfs track "*.mov"
git lfs track "*.avi"
git lfs track "medias/**" # 或直接跟踪整个目录(谨慎)
# 查看 .gitattributes 是否生成
cat .gitattributes
✅ 推荐按扩展名跟踪,避免误跟踪非媒体文件。
.gitattributes 示例内容:
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
4. 正常添加、提交、推送
git add .gitattributes
git add medias/avc1_18s_moovback_MPEG-4.mp4
git commit -m "Add large video via LFS"
git push origin main
⚠️ 首次推送会上传大文件到 LFS 服务器,需联网且耗时较长。
📌 注意事项
| 问题 | 解决方案 |
|---|---|
| 已误提交大文件到 Git 历史 | 必须用 git filter-repo 彻底清除(否则 LFS 无效) |
| 团队协作 | 所有成员需安装 Git LFS,否则会拉到指针文件(乱码) |
| LFS 存储配额 | GitHub 免费账户有 1GB LFS 配额,超限需付费 |
| 不要跟踪整个目录 | git lfs track "medias/**" 可能包含非大文件,建议按扩展名 |
🚫 如果你不想用 Git LFS(不推荐)
替代方案:
- 将视频存到外部存储(如 AWS S3、阿里云 OSS、Google Drive)
- 在代码中只保留下载链接或哈希校验文件
- 提供脚本自动下载:
# download_media.sh wget https://your-bucket/video.mp4 -O medias/video.mp4
适用于开源项目(避免泄露私有链接)或超大文件(>2GB)。
🔁 如果已误提交大文件?必须清理!
如果视频已经提交到 Git 历史(即使后来删除),仍会存在于 .git 中。必须重写历史:
# 安装 git-filter-repo(比 BFG 更现代)
pip install git-filter-repo
# 删除 medias 目录所有文件的历史记录
git filter-repo --path medias/ --invert-paths
# 强制推送到远程(⚠️ 危险!确保团队知晓)
git push origin --force --all
💡 清理后再配置 LFS,否则新提交仍会叠加历史体积。
✅ 最佳实践总结
| 场景 | 推荐做法 |
|---|---|
| 新项目,要加视频 | ✅ 立即配置 Git LFS,按扩展名跟踪 |
| 已有大文件在历史中 | 🔥 先用 git-filter-repo 清理,再设 LFS |
| 视频 > 2GB 或太多 | ☁️ 改用云存储 + 下载脚本 |
| 开源项目 | 🔗 提供公开下载链接,避免 LFS 配额耗尽 |
📦 示例:完整流程
# 1. 初始化 LFS
git lfs install
# 2. 跟踪视频格式
git lfs track "*.mp4"
git lfs track "*.mov"
# 3. 提交 .gitattributes
git add .gitattributes
git commit -m "Enable Git LFS for videos"
# 4. 添加视频并推送
git add medias/
git commit -m "Add sample videos"
git push origin main # 首次会上传到 LFS
完成后,其他人 clone 时会自动下载真实文件(需安装 Git LFS)。

浙公网安备 33010602011771号