用 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 SDK:
git-lfs-server是一个 Dart 包,因此需要它来执行。- Ubuntu:
sudo snap install flutter - MacOS:
brew install flutter
- Ubuntu:
- pwgen:
git-lfs-server需要它来生成随机身份验证码。- Ubuntu:
sudo apt-get install pwgen - MacOS:
brew install pwgen
- Ubuntu:
- Git LFS:您需要手动从原始远程仓库获取大文件。
- Ubuntu:
sudo apt-get install git-lfs - MacOS:
brew install git-lfs
- Ubuntu:
从源文件
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_URL:git-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的日志记录。