我知道 git LFS 导致 git 在文本文件中存储字符串“指针”,然后 git LFS 下载该目标二进制文件。这样,远程 git 服务器上的 git repos 就会更小。但是,git LFS 仍然必须存储二进制文件,所以在我看来,本地存储(经过一段时间后)git lfs pull
)没有什么不同,并且远程 git LFS 服务器数据加上远程 git 数据的总和仍然相似。
我缺少什么?git LFS 如何高效跟踪二进制文件?
git lfs
. 我现在建议反对使用git lfs
也可以看看:
我开始提出这个问题是因为我相信 Git LFS 是令人惊奇和美妙的,并且我想知道如何做到这一点。相反,我最终意识到 Git LFS 是我日常工作流程问题的原因,我不应该再使用它,也不应该再推荐它。
概括:
对于个人、免费的 GitHub 帐户来说,它的限制太大了,而对于付费的公司帐户,它需要
git checkout
花费几秒钟到长达 3 个多小时,特别是对于远程工作人员来说,这完全是浪费他们的时间。我处理这个问题三年了,这太可怕了。我编写了一个脚本每晚执行一次来缓解这种情况,但我的雇主拒绝给我购买更大的 SSD 来给我足够的空间每晚git lfs fetch
执行一次,所以我仍然经常遇到多小时结账的问题。除非您删除整个 GitHub 存储库并从头开始重新创建,否则git lfs fetch --all
也不可能撤消与存储库的集成。git lfs
细节:
我刚刚发现免费版本git lfs
有如此严格的限制,以至于它毫无用处,我现在正在将其从我所有的公共免费存储库中删除。请参阅此答案(GitHub.com 的存储库大小限制)并搜索“git lfs”部分。
在我看来,唯一的好处git lfs
是,当您克隆存储库时,它可以避免一次下载大量数据。就是这样!对于任何总内容大小(git repo + 可能的 git lfs repo)< 2 TB 左右的存储库来说,这似乎是一个非常小的好处,即使不是无用。所有这些使用git lfs
所做的就是
git checkout
永远(字面意思是几个小时)(坏)git checkout
现在变成在线且慢速的 git 命令(不好),并且如果您像我一样尝试使用git lfs
克服 GitHub 的100 MB 最大文件大小限制,请不要这样做!你几乎会立即耗尽git lfs
空间,特别是如果有人克隆或分叉你的存储库,因为这会影响你的限制,而不是他们的限制!相反,“可以使用诸如tar
plussplit
之类的工具,或者split
单独使用工具,将一个大文件分割成更小的部分,例如每个 90 MB”(源代码),这样您就可以将这些二进制文件块提交到您的常规文件中。git
存储库。
最后,GitHub 上停止使用git lfs
并完全释放该空间的“解决方案”绝对是疯狂的疯子!您必须删除整个存储库!请参阅此处的问答:如何删除 git-lfs 跟踪的文件并释放存储配额?
GitHub 的官方文档证实了这一点(强调是添加的):
从 Git LFS 中删除文件后, Git LFS 对象仍然存在于远程存储上,并将继续计入您的 Git LFS 存储配额。
要从存储库中删除 Git LFS 对象,请删除并重新创建存储库。当您删除存储库时,任何关联的问题、星号和分支也会被删除。
我不敢相信这甚至被认为是一个“解决方案”。我真的希望他们正在努力解决这个问题。
git lfs
:快速总结:不要使用git lfs
. 相反,请为您的员工购买更大的 SSD。如果您最终使用了,请为您的员工购买更大的 SSD,这样他们就可以在每晚睡觉时git lfs
运行一个脚本。git lfs fetch --all
细节:
假设您是一家科技公司,拥有 50 GB 大小的大型单一存储库,以及您希望成为存储库一部分的二进制文件和数据,大小为 4 TB。与其给他们提供不足的 500 GB ~ 2 TB SSD,然后再求助于家庭互联网连接git lfs
,这会使git checkout
工作时间从几秒缩短到几小时,不如为您的员工提供更大的固态硬盘!一名典型的技术员工每天的成本 > 1000 美元(每周 5 个工作日 x 48 个工作周/年 x 1000 美元/天 = 24 万美元,低于他们的工资 + 福利 + 管理费用)。因此,如果能节省他们的时间,价值 1000 美元的 8 TB SSD 是完全值得的!购买示例:
现在,他们希望有足够的空间git lfs fetch --all
在自动夜间脚本中运行,以获取所有远程分支的 LFS 内容,以帮助缓解(但不是解决)这个问题,或者至少git lfs fetch origin branch1 branch2 branch3
获取最常用分支的哈希内容。
git lfs
[即使对于远程存储库]:本地存储库是否需要 Git LFS?git lfs post-checkout
git checkout
git lfs fetch
git lfs fetch --all
git lfs pull
Joh*_*nck 11
当您克隆 Git 存储库时,您必须下载其整个历史记录的压缩副本。您可以访问每个文件的每个版本。
使用 Git LFS,文件数据不会存储在存储库中,因此当您克隆存储库时,不必下载 LFS 中存储的文件的完整历史记录。仅从 LFS 服务器下载每个 LFS 文件的“当前”版本。从技术上讲,LFS 文件是在“签出”而不是“克隆”期间下载的。
因此,Git LFS 并不是为了有效地存储大文件,而是为了避免下载所选文件的不需要的版本。无论如何,这段历史通常不是很有趣,如果您需要旧版本,Git 可以连接到 LFS 服务器并获取它。这与常规 Git 形成鲜明对比,常规 Git 允许您离线签出任何提交。
归档时间: |
|
查看次数: |
2852 次 |
最近记录: |