用 Dart 实现的一个简单的 Git LFS 服务器。

概述

Git Large File Storage (LFS) 是一款免费的开源扩展,用于在 Git 中用文本指针替换大文件,并将这些文件的内容存储在远程服务器上。—— GitHub 培训和指南

Git LFS 协议需要一个支持 LFS 的 Git 服务器和一个 Git LFS 客户端。只有一个官方的开源 LFS 客户端。但是有几种 LFS 服务器实现。此实现提供了一个与 Git 镜像配合使用的简单解决方案。

此实现可用于的一个示例

您的团队在 GitHub 上有一个 (LFS) 仓库(它支持 LFS)。该仓库包含非常大的文件,因此您将其镜像到本地机器以与您的团队共享以节省带宽。您的队友可以从您的本地机器而不是 GitHub 克隆/获取/拉取。问题是 git lfs 始终无法获取文件。您在镜像上运行 git lfs fetch --all 但问题并未解决。这是因为您的机器没有 Git LFS 服务器。所以这个实现现在派上用场了。只需安装并运行它,您的队友就可以与 LFS 一起从您的本地机器克隆/获取/拉取。请注意,此实现仅支持*下载*操作,即 git lfs fetch。您*不能*上传文件,即 git lfs push

安装

依赖项

  • Dart SDKgit-lfs-server 是一个 Dart 包,因此需要它来执行。
    • Ubuntu:sudo snap install flutter
    • MacOS:brew install flutter
  • pwgengit-lfs-server 需要它来生成随机身份验证码。
    • Ubuntu:sudo apt-get install pwgen
    • MacOS:brew install pwgen
  • Git LFS:您需要手动从原始远程仓库获取大文件。
    • Ubuntu:sudo apt-get install git-lfs
    • MacOS:brew install git-lfs

从源文件

dart pub global activate --source git https://github.com/khoa-io/git-lfs-server.git

Docker

待办事项

用法

配置 HTTPS

  • 服务器
    • 生成密钥对:openssl req -x509 -sha256 -nodes -days 2100 -newkey rsa:2048 -keyout mine.key -out mine.crt
    • 将密钥对转换为 PEM 文件:openssl x509 -in mine.crt -out mine.pem
  • 客户端:修改 ~/.gitconfig

[http "https://address:port"]
	sslverify = false

环境变量

git-lfs-server 需要一些环境变量才能运行

  • GIT_LFS_SERVER_URLgit-lfs-server 的 URL,例如:https://:8080
  • GIT_LFS_EXPIRES_IN:服务器过期文件对象的时间(秒),例如 86400
  • GIT_LFS_SERVER_CERT:证书文件的路径,例如 mine.crt
  • GIT_LFS_SERVER_KEY:密钥文件的路径,例如 mine.key
  • GIT_LFS_AUTHENTICATE_TRACE:控制 git-lfs-authenticate 命令的日志记录。
  • GIT_LFS_SERVER_TRACE:控制 git-lfs-server 命令的日志记录。
  • GIT_LFS_AUTH_SERVICE_TRACE:控制 auth-service 的日志记录。
  • GIT_LFS_HTTP_SERVER_TRACE:控制 http-server 的日志记录。

开发

查看 DEVELOPING.md

GitHub

查看 Github