9个版本
| 0.4.5 | 2023年12月12日 |
|---|---|
| 0.4.2 | 2021年6月10日 |
| 0.3.3 | 2021年3月31日 |
| 0.2.1 | 2021年3月29日 |
| 0.1.0 | 2021年3月27日 |
#399 在 开发工具
每月 29次下载
26KB
377 行
lohr
lohr 是一个Git镜像工具。
我创建它来解决我遇到的一个简单问题:我在 https://git.alarsyo.net 上托管自己的git服务器,但想将我的公开项目镜像到GitHub / GitLab,用于备份和可见性。
GitLab有一个镜像设置,但据我所知,它不允许有多个镜像。我还希望我的实例是唯一的事实来源。
工作原理
每次推送更新时,Gitea都会将webhook发送到我的 lohr 服务器。当 lohr 收到推送时,它会克隆相关的仓库,如果已克隆则更新它。然后它将更新推送到 所有在 .lohr 文件中列出的远程服务器。
破坏性
这是一个非常破坏性的过程:从单一事实来源中删除的任何内容也将从任何镜像中删除。
安装
lohr 已在 crates.io 上发布,因此您可以使用 cargo install 安装它
$ cargo install lohr
注意:目前此方法不会为您提供 lohr 的最新版本,因为它依赖于尚未发布的 Rocket v0.5.0。一旦 Rocket v0.5.0 发布,lohr 的更新版本将发布在crates.io上。
设置
快速入门
设置 lohr 应该相当简单
-
创建一个
Rocket.toml文件并 添加您的配置。 -
导出秘密变量
$ export LOHR_SECRET=42 # please don't use this secret -
运行
lohr$ cargo run # or `cargo run --release` for production usage -
将您最喜欢的git服务器配置为在每次推送事件时向
lohr的地址发送webhook。我使用了 Gitea的webhooks格式,但 我认为 它们与GitHub和GitLab的webhooks类似,因此这些也应该有效!(如果不起作用,请 提交问题!)
别忘了将 webhook 密钥设置为上面您选择的那个。
-
添加一个包含您想镜像此仓库的远程的
.lohr文件git@github.com:you/your_repo并推送它。就这样!
lohr现在正在镜像您的仓库。
配置
主目录
lohr 需要一个地方来克隆仓库并存储其数据。默认情况下,它是当前目录,但您可以将 LOHR_HOME 环境变量设置为自定义。
共享密钥
如快速入门指南所示,您必须设置 LOHR_SECRET 环境变量。
额外远程配置
您可以为 lohr 提供一个包含额外配置的 YAML 文件。您可以在启动 lohr 时通过 --config 标志传递其路径。如果没有通过 CLI 标志提供配置,lohr 将检查 LOHR_CONFIG 环境变量。如果没有设置环境变量,它将检查 LOHR_HOME 中是否存在 lohr-config.yaml 文件,并尝试加载它。
此文件采用以下格式
default_remotes:
- "git@github:user"
- "git@gitlab:user"
additional_remotes:
- "git@git.sr.ht:~user"
blacklist:
- "private-.*"
default_remotes是当在仓库中找不到.lohr文件时要使用的远程列表。additional_remotes是在任何情况下都要添加的远程列表,无论是通过default_remotes还是通过.lohr文件设置原始远程集。blacklist是要匹配完整仓库名的正则表达式列表。任何匹配的都不会镜像,即使它包含.lohr文件。
这两个设置都接受一个“根”列表作为输入,即不完整的远程地址,然后将仓库的名称附加到这些地址上(例如,如果我的 default_remotes 包含 git@github.com:alarsyo,并且收到一个针对仓库 git@gitlab.com:some/long/path/repo_name 的推送事件 webhook,那么镜像目标将是 git@github.com:alarsyo/repo_name。
贡献
我接受任何地方的补丁!请随意 在 GitHub 上提交一个 Pull Request,一个 GitLab 合并请求,或 通过电子邮件发送我一个补丁!
为什么是 lohr?
我在寻找一个酷炫的名字,想到了《白雪公主》中的魔镜。经过一些 狂热的维基百科搜索 后,我发现魔镜可能受到了 洛尔市的主镜 的启发。就这样,这就是故事。
许可
lohr 在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖关系
~19–54MB
~882K SLoC