Git 为什么Bibucket服务器在本地存储LFS对象?

Git 为什么Bibucket服务器在本地存储LFS对象?,git,bitbucket,bitbucket-server,git-lfs,Git,Bitbucket,Bitbucket Server,Git Lfs,我已经成功地用PostgreSQL db设置了Bitbucket服务器,但LFS有问题。我做的每件事都是按计划进行的。起初,它似乎是有效的,因为推拉时没有错误。问题是LFS文件在本地存储在my repo中,同时存储在服务器上。是什么导致了这个问题?(这是基于评论讨论,但我们已经达到了这样的程度,我想我看到了你的问题,在进一步的评论中,答案可能有点笨拙……) 诚然,git LFS在某些情况下可以减少用于大型文件的本地存储,但将其视为主要尝试保存不必要的大型文件传输可能更有用,同时还具有减少本地存

我已经成功地用PostgreSQL db设置了Bitbucket服务器,但LFS有问题。我做的每件事都是按计划进行的。起初,它似乎是有效的,因为推拉时没有错误。问题是LFS文件在本地存储在my repo中,同时存储在服务器上。是什么导致了这个问题?

(这是基于评论讨论,但我们已经达到了这样的程度,我想我看到了你的问题,在进一步的评论中,答案可能有点笨拙……)


诚然,git LFS在某些情况下可以减少用于大型文件的本地存储,但将其视为主要尝试保存不必要的大型文件传输可能更有用,同时还具有减少本地存储的潜在附加好处

与核心git一样,当前签出的所有数据都必须保存在本地[1]。与CoreGit不同,您不必保留历史上使用的所有文件的本地副本。有两种方法可以避免在repo的LFS存储中存在大型文件的本地副本:

1) 其他人添加了该文件,而您从未签出任何使用该文件的提交

2) 签出不依赖于某些文件的内容后,您将其删除(最好通过运行
git-lfs-prune

LFS确实为您认为可能在本地需要的内容制定了规则(“最近提交”、“最近分支”等)。这些可以通过配置进行调整。git lfs手册页面可能比我更清楚地说明了这一点()。我将从
prune
fetch
页面开始

LFS不喜欢自动删减商店,因为它认为可能有多个回购协议共享一个LFS商店,并且不想做出假设

因此,出于这些原因,如果您的期望是LFS将释放本地存储,那么它可能看起来不起作用。但是,如果您有一个包含大文件和大历史记录(深层历史记录和/或许多分支)的现有回购协议,那么您会发现克隆此类回购协议的时间大大缩短了—这确实是了解LFS希望为您做什么的起点

因此,总结一下:

  • 如果你想释放本地存储,你需要告诉lfs删减本地存储

  • prune
    仍将保留它认为您可能需要的东西(部分取决于您的配置)

  • 当前签出的内容始终保存在本地



[1] 当然,在任何一种情况下,“local”都意味着“据git所知的本地”;如果您真的想将文件存储在其他地方,您可以使用远程文件系统,但在许多使用情况下,您可能会发现这是一个致命的打击。

如果“在我的repo中本地”是指“在
.git/lfs/objects
目录中”,那么这似乎是根据lfs的设计,我不确定您期望的行为。本地需要这些文件,服务器上也需要这些文件。确实,您可以修剪本地存储以删除“最近的分支”上的“最近的提交”中未使用的对象(但如果您签出这些提交,则仍必须再次获取这些对象);这就是你想要的信息吗?@MarkAdelsberger我对git还是新手,所以我一定是误解了什么。我原以为这些文件只会存储在服务器上,但事实似乎并非如此。除了prune,我还有什么别的东西可以让它工作吗?谢谢你的帮助!