当前位置: 首页 > article >正文

Git 仓库 大文件管理


  1. 为什么 Git 仓库和本地项目文件夹一样大?

    • 原因:初始化一个 Git 仓库并添加文件(git add + git commit)时,Git 会把所有被添加的文件的内容和元信息(例如提交历史、文件的哈希值等)存储在 .git 文件夹中。初次添加时 .git 的大小可能接近整个项目的大小,因为每个文件生成一个压缩的快照。
    • 直接删除本地源文件后

      如果这些文件已经被添加并提交到 Git 仓库,只要 .git 文件夹完好,数据都可以通过 git checkout HEAD -- <文件路径>  恢复
      如果文件只是用 git add 添加到暂存区,但没有 git commit,它们依然可能保存在 .git/index 中,可以通过工具恢复(复杂且不可靠)。
    • 使用分支操作删除文件前,创建一个新分支保存当前状态:git branch backup-files

压缩本地空间的措施

1. 删除不必要文件

初始化或提交前,

  1. 在项目根目录创建 .gitignore 文件。
  2. 将不需要的文件和目录添加到 .gitignore
  3. 执行 git rm --cached <文件或目录> 删除已经添加到暂存区但不需要版本控制的文件。
# 忽略编译文件和临时文件
*.class
*.log
*.tmp

# 忽略 IDE 配置文件(例如 IntelliJ IDEA)
.idea/
*.iml

# 忽略特定目录
build/
dist/
2. 清理 Git 仓库历史

如果已经有提交历史导致仓库变得很大:

  1. 检查仓库大小:输出包含 .git 文件夹的大小、压缩包大小等信息。

    git count-objects -vH
    
  2. 移除历史中的大文件:这将删除历史中所有提到该文件的记录。

    git filter-repo --path <文件路径> --invert-paths
    
  3. 瘦身 Git 仓库:执行垃圾回收,移除未引用的历史对象。

    git gc --aggressive --prune=now
    

根据 GitHub 官方文档,每个使用 Git Large File Storage (LFS) 的帐户都会获得 1 GiB 的免费存储空间每月 1 GiB 的免费带宽。查看 Git 大型文件存储使用情况 - GitHub 文档

Git LFS 的工作原理

  1. 将大文件的实际内容存储在一个专用的外部服务器上。这通常是托管平台(如 GitHub)提供的 LFS 存储服务。本地仓库中仅保存文件的引用信息,例如一个文件指纹(OID)和相关元数据,而非实际的大文件内容。

  2. 如何存储大文件?用 Git LFS 跟踪某类文件(比如 .zip 文件)时,提交这些文件时,Git 并不会直接把文件内容存储在 .git 中,而是用一个指向外部存储的“指针”文件代替。只有在你需要访问该文件时,LFS 才会从外部存储中下载实际内容到本地。

使用 Git LFS 的操作流程

# 初始化 Git LFS
git lfs install

# 告诉 LFS 要跟踪哪些文件类型
git lfs track "*.zip"

# 将跟踪规则保存到仓库(在 .gitattributes 文件中)
git add .gitattributes

# 添加并提交大文件
git add large-file.zip
git commit -m "Add large file"

# 推送到远程仓库(包括 LFS 对象)
git push origin main

结果:large-file.zip 的实际内容被上传到 LFS 外部存储。本地 .git 文件夹不会包含实际的大文件内容。

当然是限制存储配额的GitHub 为每个仓库提供有限的免费 LFS 存储空间


http://www.kler.cn/a/508185.html

相关文章:

  • 前端【3】--CSS布局,CSS实现横向布局,盒子模型
  • 26个开源Agent开发框架调研总结(一)
  • 归并排序算法
  • 51.WPF应用加图标指南 C#例子 WPF例子
  • AWTK fscript 中的 输入/出流 扩展函数
  • 关于 Cursor 的一些学习记录
  • Kafka客户端-“远程主机强迫关闭了一个现有的连接”故障排查及解决
  • 闪豆多平台视频批量下载器
  • Git:标签管理
  • 【JAVA 基础 第(19)课】Hashtable 类用法和注意细节,是Map接口的实现类
  • 青少年编程与数学 02-007 PostgreSQL数据库应用 02课题、PostgreSQL数据库安装
  • “扣子”开发之四:与千帆AppBuilder比较
  • 冒泡排序 选择排序 插入排序
  • Scrapy中间件的使用
  • OpenCSG助力国产大模型|YuLan-Mini:数据高效的AI模型突破
  • Spring Boot框架总结(超级详细)
  • 程序设计:排版、检验报告的上下标解决几种办法
  • 与 Spring Boot 的无缝集成:ShardingSphere 快速集成实践
  • Elasticsearch(ES)与 MySQL 的对比分析及在 Spring Boot 中的使用
  • 前缀和 (一维 二维)
  • 彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构
  • C++ 的 CTAD 与推断指示(Deduction Guides)
  • 《Opencv》图像金字塔与采样
  • 【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
  • Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧
  • Unsloth 大模型微调工具与 llama.cpp 量化推理库简介及其预训练操作方法