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:
- "[email protected]:~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