Git 主要用于代码版本控制,可以快速查看不同版本的代码内容的变更信息。但在实际使用过程中,代码仓库不仅会有纯文本的代码,可能会有 PSD 设计图、docx 文件、zip压缩包等二进制文件。
随着这些非文本的文件数量不断增多和多次版本迭代,Git 仓库的体积会迅速膨胀,并且 Git checkout 会变得非常缓慢。
Git LFS(Large File Storage)是为了专门支持大文件存储的 Git 扩展,它可以通过延迟下载大文件方式有效降低 Git 仓库的压力,带来的优势如下:
值得一提的是,CODING 支持 Git LFS 扩展,开发过程中使用 Git LFS 所提交的大文件不占用团队自身的 Git 仓库容量,有助于节省团队代码存储资源。
Git LFS 实现优化大文件存储的方式,是使用文件的指针文件替换原来的大文件,把大文件单独存储于 lfs 缓存目录中。
当我们需要用到这些大文件时,Git LFS 自动会根据指针,从缓存目录中检出对应真实文件。
当我们把大文件添加 commit 到仓库时,git 的 commit hook 会调用 Git LFS 计算出文件的 hash,然后把文件内容替换对应的指针,并把真实的文件内容存放于 `.git/lfs/objects` 目录。
LFS 的指针文件体积非常小,通常小于 1KB,下文为一个图片的指针文件格式示例:
version https://git-lfs.github.com/spec/v1
oid sha256:8ffbc5bf63f5622d9241bb6b1f726c6314f071acee7c49a4aee1c637c85d8f87
size 4498040
执行 `git push` 命令时,Git 的 push hook 会调用 Git LFS,把指针文件会直接推送到 Git server,而另一个部分的真实的 LFS 文件会推送到 Git LFS 存储服务器(需要对应的 Git server 支持 LFS 功能)
当我们通过 `git clone` 下载 Git 仓库时,首先下载得到一个体积较小的 Git 仓库,其中只包含代码文件和 LFS 指针文件。然后通过 Git 的 checkout hook 会调用 Git LFS,从上文提到的 Git LFS 存储服务器中下载当前分支所需的 LFS 大文件,而不需要下载 Git 仓库历史中所有文件。
如果切换到其他分支,Git 会快速切换为对应的指针文件,然后 Git LFS 通过 git checkout hook 检出本地 `.git/lfs/objects` 目录中对应的真实文件,并从 Git LFS 存储服务器中下载缺少的文件。
从上面的流程里可以看出,Git LFS 是在 Git 操作 `commit`、`push`、`checkhout` 的 hook 自动执行的,可以在正常 Git 命令无缝使用,没有太大的心智负担。
现在,Cloud Studio 开发空间已经集成了 Git LFS,可以便捷使用在线编辑器和命令行,可以快速地把前端图片添加到 Git 仓库中。下面是使用的流程:
1. 打开 Cloud Studio 开发空间,当前是一个静态网页项目,我们要在 static 文件夹下添加图片和 CSS
2. 现在把所有 png 图片设为 Git LFS 存储模式
在终端执行命令 `git lfs track "*.png"`,此时可以看到已经执行成功
$ git lfs track "*.png"
Tracking "*.png"
同时还可以看到,根目录中生成了一个 `.gitattributes` 文件,这个文件是用与记录 Git LFS 配置
3. 然后,我们只需要执行 `git add .` 和 `git commit` 命令,把刚才所有图片、css 文件和 `.gitattributes` 提交 commit 到 Git 仓库中,并且自动把图片设置为 Git LFS 存储
4. 我们可以简单验证 Git LFS 是否有设置成功
通过命令 `git lfs ls-files`,可以列出所有 LFS 的文件。
从结果可见,刚才的图片已经设置为 Git LFS 存储模式。
当然,我们还可以从上文的 Git LFS 原理,从 LFS 缓存目录检查是否有对应文件。
通过 `git show` 命令,我们可以看到最新的 commit 提交的 `banner.png`,图片内容实际只有 3 行文本,其中包括协议 version、文件的 oid sha256 hash 和实际文件大小 size。
根据这个文件 oid 对应的 hash,可以找到真实文件在 `.git/lfs/objects` 的路径。
Cloud Studio 会把一些常用的软件直接内置到我们的预置环境中,比如 Git LFS,让开发者无需自行安装就能开箱即用。对于一些不常用的软件,虽然 Cloud Studio 无法给我们预置,但是 Cloud Studio 的工作空间支持几乎所有文件目录的持久化能力,我们可以像本地环境一样,安装软件到 Cloud Studio 工作空间,且软件并被持久化下来,下次打开工作空间时,软件仍然存在,无需再次安装。除此之外,Cloud Studio 还提供了很多有价值又好玩的功能,比如代码协作、云部署、自定义模板等等。欢迎大家来使用 Cloud Studio 产品。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。