---
title: "如何从项目中移除git-lfs"
canonical_url: "https://yangqiuyi.com/blog/kai-fa/ru-he-cong-xiang-mu-zhong-yi-chu-git-lfs"
---

> Index of every page on this site: [llms.txt](https://yangqiuyi.com/llms.txt)

# 如何从项目中移除git-lfs

## Git LFS

Git LFS（Large File Storage）是 Git 的一个扩展，用于处理和管理大型文件和二进制文件。引入 Git LFS 的主要原因包括：

1. **减小仓库体积**：普通的 Git 仓库在处理大文件时，仓库的体积会迅速增大，因为 Git 会保存每个版本的完整文件。Git LFS 通过只在本地存储文件的指针，而不是文件的完整内容，减小了仓库的体积。
2. **提高性能**：由于 Git 不擅长处理大文件，克隆、拉取和推送操作在有大文件的仓库中会变得非常慢。Git LFS 通过只在需要时下载大文件，提高了这些操作的性能。
3. **优化存储**：Git LFS 将大文件存储在一个专门的服务器上，而不是在 Git 仓库中。这使得仓库的存储更加高效，并且可以利用专门的存储解决方案来管理大文件。

## 为什么不要使用 Git LFS <sup>

[1](#user-content-fn-hn-lfs)

</sup>



Git LFS 是一把双刃剑, 他之所以厉害, 是因为他把文件替换成了指针, 而之所以不建议使用, 也是因为他把文件替换成了指针.

### 1. Git LFS 是一个临时解决方案

Git LFS 是在 Git 项目之外开发的，目的是填补 Git 在处理大型文件方面的不足。随着 Git 的不断发展，如果 Git 未来提供了更好的原生支持，Git LFS 的价值将不再存在，这意味着 Git LFS 只是一个临时的解决方案。

### 2. Git LFS 是不可逆的

一旦在仓库中使用了 Git LFS，移除它将是一个不可逆的决定，需要重写历史并丢失原始的提交 SHA。重写历史在许多情况下是非常昂贵的，尤其是在专业环境中。即使短期内可以接受重写历史，未来的情况也可能发生变化。

在 Mercurial 中，LFS 在某种程度上是一种检出仓库的实现细节。它意味着不改变仓库内容本身（数据），而只是改变你获取该数据的方式。然而在 Git LFS 中，数据本身必须被修改才能成为 LFS 数据，并且"LFS 标志"会被记录在历史中。

### 3. Git LFS 增加了复杂性

对于 Git 用户来说，Git LFS 增加了额外的复杂性。用户需要安装、配置并了解 Git LFS 的存在。版本控制应该简单易用，大型文件处理也应该如此。Git LFS 的用户体验虽然不错，但由于它不在 Git 核心产品中，其可用性存在上限。此外，Git LFS 也会增加服务器操作的复杂性，因为需要支持一个额外的 HTTP 服务器来处理 LFS 访问。

## 如何从已经使用了 LFS 的项目中移除 LFS <sup>

[2](#user-content-fn-git-lfs-issue)

</sup>



首先给你的git安装上lfs:

```sh
git lfs install
```

然后clone你的仓库, 在你爹项目下把lfs的文件指针都拉下来, 使其变成真实的文件:

```sh
git lfs pull
```

**确保你的文件已经不再是指针之后**, 我们可以移除 `.gitattributes` 里的 lfs 相关内容.

接下来, 我们可以尝试列出所有标记为 lfs 的文件, 这条指令理论上会输出所有被标记为 lfs 的文件:

```sh
git lfs ls-files
```

我们需要为每个 lfs 文件都清理掉其在 git 中的缓存:

```sh
git rm --cached <文件路径>
```

如果项目里有很多文件的话, 这会是一个费时费力的操作, 不过好在我们可以使用管道操作来简化这一过程:

```sh
git lfs ls-files | cut -f 3 -d ' ' | xargs git rm --cached
```

然后我们可以用 `git add` 来提交修改后的文件 (主要是把文件从指针替换成了原始文件). 并且提交你修改后的 `.gitattributes` 文件.

**请在 commit 之前确保你的文件确实已经从文件指针变成了原始文件!**

至此, 我们已经成功把 git-lfs 从我们的项目中移除了.

<section className="footnotes" dataFootnotes="">

## Footnotes

1. [https://news.ycombinator.com/item?id=27134972](https://news.ycombinator.com/item?id=27134972) [↩](#user-content-fnref-hn-lfs)
2. [https://github.com/git-lfs/git-lfs/issues/3026](https://github.com/git-lfs/git-lfs/issues/3026) [↩](#user-content-fnref-git-lfs-issue)

</section>

## Sitemap

See the full [sitemap](https://yangqiuyi.com/sitemap.md) for all pages.
