Git LFS
Git LFS(Git Large File Storage)是一个用于管理和版本控制大文件的工具,它扩展了 Git 的功能,帮助处理大文件或二进制文件的存储和管理问题。
为什么需要 Git LFS?
Git 默认是针对文本文件进行优化的,尤其是源代码文件(例如 .java, .cpp, .py 等),它使用的是增量存储方式(即只存储差异),这使得 Git 在管理这些文件时非常高效。然而,Git 对于 大文件(例如图片、视频、音频文件、二进制库文件等)并不高效。每次更新大文件时,Git 会将整个文件的副本存储一份,导致 仓库膨胀,并影响性能。
Git LFS 就是为了解决这一问题而诞生的,它让 Git 在处理大文件时更加高效,并使得仓库体积得到控制。
Git LFS 的工作原理
大文件的指针存储: Git LFS 将大文件替换为文件的指针(即一个小的文本文件,存储文件的元数据和位置),而不是直接存储大文件本身。这个指针文件通常只有几百字节,而不是大文件的实际内容。
将大文件存储在 LFS 服务器: 真实的大文件(例如 .mp4、.jpg、.aar 等)被上传到 Git LFS 服务器,而 Git 仓库只存储这些文件的指针。
拉取时获取大文件: 当你克隆、拉取或检出一个包含 LFS 文件的 Git 仓库时,Git LFS 会从 LFS 服务器上下载相应的实际文件,而不是直接从 Git 仓库中下载。
使用 Git LFS 的流程:
安装 Git LFS: 在使用 Git LFS 之前,你需要安装 Git LFS 工具。可以通过以下命令安装:
brew install git-lfs && git lfs install
跟踪大文件: 你可以告诉 Git LFS 需要跟踪哪些文件类型(例如 .mp4、.zip、.aar 等):
git lfs track "*.mp4"
这会在 .gitattributes 文件中添加相应的规则。
提交文件: 提交包含大文件的 Git 仓库时,Git LFS 会自动处理大文件,将它们替换为指针并上传到 LFS 服务器。
克隆、拉取和检出: 当你或其他人克隆、拉取或检出含有 LFS 文件的仓库时,Git LFS 会自动从 LFS 服务器下载实际的大文件。
当你执行 git pull
时,Git 会自动调用 git lfs pull
来下载任何 更新的 LFS 文件,这意味着你不需要单独运行 git lfs pull,除非你想显式地拉取或刷新 LFS 文件。
将 .aar 文件添加到 Git LFS 跟踪
要将 .aar 文件添加到 Git LFS 跟踪,运行以下命令:
git lfs track "*.aar"
执行此命令后,Git 会在项目的根目录下生成或更新一个名为 .gitattributes 的文件,并添加一行配置:
*.aar filter=lfs diff=lfs merge=lfs -text
配置解读:
- filter=lfs:指定 Git LFS 作为此文件类型的过滤器,Git 在处理 .aar 文件时将通过 Git LFS。
- diff=lfs:配置 Git 在处理这些文件的差异对比(diff)时使用 Git LFS。
- merge=lfs:配置 Git 在合并这些文件时使用 Git LFS。
- -text:指定这些文件为二进制文件(非文本),避免 Git 将其作为文本文件来处理行结尾转换等操作。