大文件LFS的原理有没有通俗一点的解释
git吧
全部回复
仅看楼主
level 1
莱斯Royce 楼主
我大概知道LFS是类似指针的东西,拉取大文件时不下载原文件,而是下载一个指向其在远程服务器中地址的东西。
我不太清楚的是对LFS对象进行读写的逻辑是什么,比如我要在本地打开或编辑某LFS对象时,是实时地根据“指针”从服务器下载吗,就像访问网页一样?再比如我的某段代码使用了某LFS对象,这个LFS对象是怎么接入代码的呢,像文件名这些不会发生改变吗?
2024年06月05日 03点06分 1
level 12
不,在本地打开 LFS 对象之前,需要执行 Git 命令从仓库中获取指向对象实际存储位置(一般是独立于 Git 仓库之外的 S3 对象存储服务)下载到本地。对于 LFS 文件的变更,Git 只是简单计算其 Hash 值(好像是 SHA-1),将文件作为一个整体进行上传而不做 Diff 。进行 Push 时,Git 会根据 .lfsconfig 或者 .git/ 目录下的配置访问 LFS API ,像调用 S3 RESTful API 一样把更改后的整个文件上传。这也是为什么在使用 GitHub LFS 的时候,上下行都会消耗 LFS Bandwidth ,且同一个文件在更改后多次 Commit 会成倍消耗 LFS Storage 的原因。
如果你的代码使用了 LFS 对象,那么在实际启动运行前,同样需要 Git 命令把 LFS 对象内容实际下载到本地。至于文件名的处理是 Git 自身解决的,这个指针文件遵循特定格式,修改 LFS 对象这个文件名是不会变的,只有指针中的 Hash 值会发生改变。
2024年06月10日 02点06分 2
像 GitHub 在被 Microsoft 全盘接管之前,其大多数服务器由 Amazon AWS 提供服务,其 LFS 文件实体位于 Amazon AWS 美东一区的 S3 对象存储桶中;接管后,这些服务器则全部迁移到了 Microsoft Azure 中,LFS 文件实体在 Azure 美国区对象存储桶中。
2024年06月10日 02点06分
CSDN 的 GitCode 最初基于 GitLab CE 搭建,后续将底座切换为由华为公有云提供支持的 CodeArts ,全站底座集群所在的 Region 是「华北 - 北京四」,LFS 对象和其他 Git 仓内文件指向的下载链接也是华为公有云华北北京四区 Endpoint
2024年06月10日 02点06分
level 12
重发一遍防吞
2024年06月10日 02点06分 3
1