git - 为什么 Bitbucket Server 在本地存储 LFS 对象?

标签 git bitbucket bitbucket-server git-lfs

我已成功设置 Bitbucket Server 和 PostgreSQL 数据库,但 LFS 存在问题。我按照this guide做的一切。起初它似乎有效,因为推或 pull 时没有错误。问题是 LFS 文件同时存储在我的存储库本地和服务器上。什么可能导致此问题?

最佳答案

(这是基于评论讨论,但我们已经达到了这样的程度,我想我明白你在问什么,并且在进一步的评论中答案可能有点难以处理......)


确实,在某些情况下 git LFS 可以减少用于大文件的本地存储,但将其视为主要尝试节省大文件的不必要的传输可能更有用,减少本地存储的潜在额外好处。

与核心 git 一样,当前 checkout 的所有数据都必须保存在本地[1]。与核心 git 不同,您不必保留历史记录中使用的所有文件的本地副本。不拥有存储库 LFS 存储中大文件的本地副本的两种方法是:

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

2) 在检查了一些不依赖于某些文件的内容后,您删除了它们(最好通过运行 git lfs prune)

LFS 对于它认为您可能在本地需要的内容确实有规则(“最近提交”、“最近分支”等)。这些可以通过配置进行调整。 git lfs 手册页可能比我能说得更好( https://github.com/git-lfs/git-lfs/tree/master/docs/man )。我将从 prunefetch 页面开始。

LFS 不喜欢自动修剪存储,因为它认为您可能有多个存储库共享一个 LFS 存储,并且不想做出假设。

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

总结一下:

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

  • prune 仍会保留它认为您可能需要的内容(部分取决于您的配置)

  • 当前 checkout 的内容始终保留在本地。


[1] 当然,无论哪种情况,“本地”都意味着“据 git 所知是本地的”;如果您确实想将文件存储在其他地方,您可以使用远程文件系统,但在许多用例中您可能会发现这只会搬起石头砸您的脚。

关于git - 为什么 Bitbucket Server 在本地存储 LFS 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51381418/

相关文章:

git - 如何使用 Git ignore file 来防止将 vendor 文件夹和其他 laravel 的配置文件上传到 git 分支。什么是正确的方法?

linux - 部署时限制文件 - git

git - 什么是推送存储库 URL?

r - 从 Atlassian Stash 安装 R 包

git - git rebase 是否有相当于 "git apply --reject"的值?

git - 如何从空的主分支中分支出来

git - 从 git 分支创建符号链接(symbolic link)文件层次结构

continuous-integration - 为什么我的 bitbucket-pipelines.yml 对拉取请求脚本无效

git - 如何检查 Bitbucket 服务器端是否正在使用 Git-LFS

docker - 在 Docker Image 中复制具有执行权限的文件