如果可能的话,避免git lfs

2021-05-13 05:56:49

我长期以来一直认为,如果可能的话,你应该避免Git LFS.Since人们留着我为什么,我想到了我的想法博客帖子,所以我有一些东西可以推荐给他们。

Git LFS是在官方GIT项目之外开发的,以实现艾弗里实际市场需要Git Didn' T / DONN' T处理大文件。

我相信Git将更好地支持大型文件的守人,因为这似乎是一个流行的版本控制工具的关键功能。

如果您在这次长期下注时,LFS只是一个临时解决方案,而且Git在GIT具有更好的本机支持后,其值下将消失。

在存储库中采用或删除Git LFS是一种IrreversiDecistic,需要重写历史并失去原始提交SCA。

在某些情况下,重写历史可容忍。在许多其他人中,ITIS一个非常昂贵的主张。我的经验维护在专业背景下的维护控制与重写历史昂贵的观点保持昂贵,只应被视为最后的手段。也许如果工具使得在没有负面后果的情况下更容易重写(例如,GitHub将重新调情到URL和API呼叫中的旧SHA1)我会改变我的意外。直到那一天,失去历史的缺点对于许多人来说太过于肚子。

通过或去除LFS的原因是不可逆转的,是由于GIT LFS的作品。 LFS所做的是更改Agit提交/树引用的Blob内容。而不是内容本身,它将它存储到内容的指针。在结账和提交时间时,通过Git中的机制特殊处理LFS Blobs / Recordsare,允许内容在Git' S核心存储之间移动和其物质化静态。 (相同的过滤机制是文本文件中的负责任的责任线路结束。虽然该功能是内置的核心Git产品,并不完全相同的方式。但原则是相同的。)

由于LFS指针是Merkle树的一部分,即Git Counderives来自,您可以' T从Repo添加或删除LFS而无需重写Git提交SCA。

我想明确地呼唤,即使短期内的重写是可接受的,事情也可能在未来变化。如果您采用LFStoday,您将永久运行LFS服务器B)将来导致历史记录重写,以便从youryour repo中删除lfs,或c)停止提供LFS服务器并使用较旧的Git提交锁定人员。我不认为这些是伟大选择:如果有一种方法,我宁愿从LFS中断,随着最小的中断。这是理论上可能的,请支出要求Git核心产品本身识别LFS Blobs /记录。'否保证这将发生这种情况。所以采用Git LFS是一个可以' t容易逆转的单门门。

Git用户必须安装,配置,有时知道Git LFS的简称。版本控制应该只工作。大型文件手柄应该只工作。最终用户应该注意,必须小心文件与小文件略微不同地处理。

Git LFS的可用性通常非常好。但是,只要LF存在于CoreGit产品之外,就可以使用它的Anupper限制。 LFS可能永远不会集成到核心GiitProduct中,因为Git维护者知道LFS只是停止展望。他们宁愿在〜Forevers携带遗留行李,以便在CoreProduct中支持LFS的遗留行李来解决大文件存储。

LFS对Git Server运算符更复杂。而不是将自包含的Git存储库和服务器支持,您现在HAVETO支持一个可能的HTTP服务器,以方便LFS Access.This ISN' T最难的东西,特别是因为我们'返回关于钥匙值Blob Storage可以说是一个解决的问题。但它'另一块基础架构来支持和安全,它是复杂性的表面积,而不是最小化它。即服务器运算符,如果大文件储存,我将更喜欢集成到核心Git产品中,我只是需要提供它的设置。

自I' m是Mercurial版本控制工具的维护者,我觉得' d抛出了Mercurial如何处理大型文件存储更好的Thangit。 Mercurial' S大文件处理ISN' T Greaty,但我相信采用大型仓储的权衡严格更好地更好地更好。

在Mercurial中,使用LFS是一个动态的功能,即服务器/ repo operatorscan选择每当想要启用或禁用。当MercialServer将文件内容发送到客户端时,在该文件修订版上设置外部/ LFS StorageS的标志。本质上,标志称,您正在接收的Thedata是一个LFS记录,而不是文件内容本身,客户端知道如何将该记录重新分析到内容中。

在概念上,这与Content解决方案中的Git LFS记录很小。但是,很大的区别是该标志是存储库交换数据的一部分,而不是带有git的核心存储库数据。由于此标志ISN' T部分Merkle树用于响应于Commit SHA,添加,删除或改变其中的文档内容并不需要重写提交SCA。跟踪的内容 - 现在存储在LFS中的数据 - 仍然被跟踪为MerkletRee的一部分,因此仍然可以验证提交/存储库的完整性。

在Mercurial中,选择是否使用LFS以及服务器操作员和设置使用的LFS Foris的内容可以随时间改变。 forexample,您可以从不使用LFS开始,然后一天决定淘汰Lous LFS,用于大于10 MB的所有文件修订。然后一年稍后降低到大于1 MB的所有修订。然后,一年后的Mercurial获得了对大型文件的原始支持,您决定完全停止使用LFS。

同样在Mercurial中,客户可以作为推送操作的一部分inline推动大文件。当服务器看到那个文件时,它可能就像这是一个大文件:i' m要将blob商店添加到blob store并作为lfs宣传它。因为大型唱片ISN' T部分Merkle树,你可以有很好的东西。

我怀疑git' s wire Protocol Searchshe动态广告远程服务器以进行ContentRetrieval的能力,且此功能将利用此功能以获得更好的大型文件。直到那一天,我想我们'恢复了用LFS和/或漏斗的毛刺历史,通过当本地加入大斑点,所有需要的疼痛都是如此。

这篇文章总结了避免Git LFS的原因。使用LFS是否有justifiablescenarios?绝对地!如果您坚持使用Git Andinsist进行跟踪版本控制中的许多大文件,则肯定会考虑LFS。 (虽然,如果您是版本控制中的大文件的沉重用户,我会考虑塑料SCM,因为它们似乎拥有大文件处理的最成熟解决方案。)

这篇文章的要点是突出一些缺点,因为Git LFS绝对不是魔子弹。如果你可以胃部的git lfs采用的短期和长期影响,byall意味着,使用git lfs。但请以任何方式做出明智的决定。