git-lfs:基于 Git 的大文件存储管理工具项目

可帮助用户在 Git 仓库中高效管理大文件,避免仓库体积膨胀。该项目是命令行扩展及规范,采用 Go 编写,支持多平台,提供文件追踪、迁移等核心功能,简化大文件的 Git 操作流程。【此简介由AI生成】

分支1Tags1
文件最后提交记录最后更新时间
2 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
2 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
2 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
2 年前
2 年前
2 年前
2 年前
1 年前
2 年前
1 年前
2 年前
2 年前
1 年前
1 年前
2 年前
2 年前
2 年前
2 年前
1 年前
1 年前
1 年前

Git 大文件存储

持续集成状态

Git LFS 是一个命令行扩展工具,同时提供了一套规范,用于在 Git 中管理大文件。

该客户端采用 Go 语言编写,提供预编译的二进制文件,支持 Mac、Windows、Linux 和 FreeBSD 平台。访问官方网站可查看功能概览。

快速入门

安装指南

Linux 系统

Debian 和 RPM 安装包可通过 packagecloud 获取,详见 Linux 安装说明

macOS 系统

通过 Homebrew 安装已编译好的版本,执行命令 brew install git-lfs 即可。

Windows 系统

Git LFS 已集成在 Git for Windows 发行版中。您也可以通过 Chocolatey 包管理器安装最新版本。

二进制安装

我们为 Linux、macOS、Windows 和 FreeBSD 提供了二进制安装包。安装包内含自动化脚本,可执行以下操作:

  • 将 Git LFS 二进制文件安装至系统 $PATH 路径。特别提醒 Windows 用户,安装后可能需要重启命令行终端,才能使 $PATH 变更生效,确保 Git 能正确识别 Git LFS 程序。
  • 自动执行 git lfs install 命令,完成必要的全局配置。
$ ./install.sh

请注意,Debian 和 RPM 软件包为多种 Linux 发行版及版本构建,支持 amd64 和 i386 架构。
对于 arm64 架构,由于模拟构建成本较高,仅提供 Debian 软件包,且仅适用于较新版本。

从源码构建

  • 确保已安装最新版本的 Go、GNU make 以及标准的 Unix 兼容构建环境。
  • 在 Windows 系统上,请通过 go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest 安装 goversioninfo
  • 运行 make 命令。
  • bin 目录下的 git-lfs 二进制文件放置到系统的可执行路径 $PATH 或等效位置。
  • 每台机器需对 Git LFS 进行一次全局配置,可通过运行以下命令完成:git lfs install

验证发布版本

发布版本由核心团队成员之一的 OpenPGP 密钥签名。
要获取这些密钥,可运行以下命令,密钥将输出至标准输出:

$ curl -L https://api.github.com/repos/git-lfs/git-lfs/tarball/core-gpg-keys | tar -Ozxf -

获取密钥后,您可下载 sha256sums.asc 文件,并按如下方式验证所需文件:

$ gpg -d sha256sums.asc | grep git-lfs-linux-amd64-v2.10.0.tar.gz | shasum -a 256 -c

为便于分发者使用,我们还提供了更多经过签名的哈希值,存放于 hashes.asc 文件中。这些哈希值采用带标签的 BSD 格式,但仍可通过 Perl 的 shasum 或 GNU 哈希工具进行验证,与 sha256sums.asc 中的哈希值验证方式相同。

使用示例

若要在尚未配置 Git LFS 的 Git 仓库中开始使用 Git LFS,您可以指定希望由 Git LFS 管理的文件。具体操作是_在 Git 仓库内_运行以下命令:

$ git lfs track "*.psd"

(其中 *.psd 是你希望跟踪的文件名模式。你可以在此处了解更多关于此模式语法的信息)。

注意: 模式周围的引号非常重要,以防止 shell 扩展 glob 模式。

在每次调用 git-lfs-track(1)git-lfs-untrack(1) 后,你_必须提交对 .gitattributes 文件的更改_。可以通过运行以下命令完成:

$ git add .gitattributes
$ git commit -m "track *.psd files using Git LFS"

现在,您可以像往常一样与您的 Git 仓库交互,Git LFS 会负责管理大文件。例如,修改名为 my.psd 的文件(之前通过 *.psd 进行跟踪):

$ git add my.psd
$ git commit -m "add psd"

提示: 如果您的仓库历史中已存在大文件,git lfs track 不会追溯追踪它们。要将历史中的现有大文件迁移至 Git LFS,请使用 git lfs migrate。例如:

$ git lfs migrate import --include="*.psd" --everything

请注意,此操作会重写历史记录并更改仓库中的所有 Git 对象 ID,与此命令的导出版本类似。

更多信息,请阅读 git-lfs-migrate(1)

您可以确认 Git LFS 正在管理您的 PSD 文件:

$ git lfs ls-files
3c2f7aedfb * my.psd

提交更改后,将文件推送至 Git 远程仓库:

$ git push origin main
Uploading LFS objects: 100% (1/1), 810 B, 1.2 KB/s
# ...
To https://github.com/git-lfs/git-lfs-test
   67fcf6a..47b2002  main -> main

注意:Git LFS 在 Linux 上至少需要 Git 1.8.2 版本,在 macOS 上至少需要 1.8.5 版本。

卸载

如果您认为 Git LFS 不适合您,也可以通过 git lfs migrate 命令将您的仓库转换回普通的 Git 仓库。例如:

$ git lfs migrate export --include="*.psd" --everything

请注意,这将重写历史记录并更改仓库中的所有 Git 对象 ID,正如该命令的导入版本一样。

如果因某些原因操作未能成功,请在 issue 中告知我们,我们一定会尽力协助或修复问题。

限制事项

Git LFS 维护了一份当前已知的限制列表,您可在此查阅与编辑

Git LFS 的源码在其构建系统中采用了 Go modules,因此本项目包含一个定义了 Go 模块路径的 go.mod 文件。然而,我们并不维护稳定的 Go 语言 API 或 ABI,因为 Git LFS 设计为仅作为编译后的二进制工具使用。请勿将 git-lfs 模块导入其他 Go 代码中,也不要将其作为源代码依赖项。

需要帮助?

您可以直接获取特定命令的帮助:

$ git lfs help <subcommand>

官方文档中提供了该工具的命令参考与规范说明。此外,Git LFS 还附带了常见问题解答,解答了一些常见疑问。

若您在使用 Git LFS 过程中遇到问题、存在不确定之处,或希望获取他人关于最佳实践与应用场景的建议,欢迎随时发起讨论

您也可以随时提交问题,核心团队成员将会予以回复。请务必包含以下信息:

  1. 执行 git lfs env 的输出内容,其中包含有助于调试的仓库关键信息
  2. 在环境变量中设置 GIT_TRACE=1 后重新运行失败命令的日志,这将显示命令崩溃的详细上下文

贡献指南

参与 Git LFS 开发及提交补丁的流程详见 CONTRIBUTING.md。相关项目列表请参阅实现方案维基页

安全漏洞报告流程请参见 SECURITY.md

核心团队

以下成员组成了负责项目运营的 Git LFS 核心团队(按字母排序):

[@chrisd8088][chrisd8088-user] [@larsxschneider][larsxschneider-user]
[![][chrisd8088-img]][chrisd8088-user] [![][larsxschneider-img]][larsxschneider-user]
[PGP 088335A9][chrisd8088-pgp] [PGP A5795889][larsxschneider-pgp]

荣誉成员

这些成员曾为 Git LFS 核心团队成员,或为项目作出过重大贡献。没有他们,Git LFS 不可能实现今天的成就(按字母排序):

[@andyneff][andyneff-user] [@bk2204][bk2204-user] [@PastelMobileSuit][PastelMobileSuit-user] [@rubyist][rubyist-user] [@sinbad][sinbad-user] [@technoweenie][technoweenie-user] [@ttaylorr][ttaylorr-user]
[![][andyneff-img]][andyneff-user] [![][bk2204-img]][bk2204-user] [![][PastelMobileSuit-img]][PastelMobileSuit-user] [![][rubyist-img]][rubyist-user] [![][sinbad-img]][sinbad-user] [![][technoweenie-img]][technoweenie-user] [![][ttaylorr-img]][ttaylorr-user]

[注:所有图片链接和用户主页链接均保留原始格式未作翻译]

项目介绍

可帮助用户在 Git 仓库中高效管理大文件,避免仓库体积膨胀。该项目是命令行扩展及规范,采用 Go 编写,支持多平台,提供文件追踪、迁移等核心功能,简化大文件的 Git 操作流程。【此简介由AI生成】

定制我的领域