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次下载

Apache-2.0 OR MIT

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 应该相当简单

  1. 创建一个 Rocket.toml 文件并 添加您的配置

  2. 导出秘密变量

    $ export LOHR_SECRET=42 # please don't use this secret
    
  3. 运行 lohr

    $ cargo run # or `cargo run --release` for production usage
    
  4. 将您最喜欢的git服务器配置为在每次推送事件时向 lohr 的地址发送webhook。

    我使用了 Gitea的webhooks格式,但 我认为 它们与GitHub和GitLab的webhooks类似,因此这些也应该有效!(如果不起作用,请 提交问题!)

    别忘了将 webhook 密钥设置为上面您选择的那个。

  5. 添加一个包含您想镜像此仓库的远程的 .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-APACHELICENSE-MIT

依赖关系

~19–54MB
~882K SLoC