我有两个 GitHub 存储库。
我想在将文件推送到第一个存储库时自动(可能使用 Hook 和/或 github API)将文件提交并推送到第二个存储库。
第二个存储库不是第一个存储库的克隆,它们的文件夹布局不一定相同,只有一堆文件是相同的。
最简单的方法是什么?
如果我不需要安装 http 服务器或学习 perl,我将获得加分 :)
最佳答案
如果您正在寻找稳健且易于维护的东西,我鼓励您围绕 GitHub Webhooks 开发一个解决方案.是的,它需要你部署一个 HTTP 服务器,比如 Node.js server ,并且它需要少量的开发(您的要求相当具体),但我认为如果您需要可靠且维护成本低的东西,它会有所返回。如果您认为这种文件镜像方法仍然是正确的做法,并考虑了这些方法和设置工作,那就是这样。
让源存储库(在 GitHub 上)为 S1
、S2
...(非重叠)文件集镜像 F1
, F2
..., 被发送到目标仓库 T
(也在 GitHub 上),其中相应的文件被认为是只读的。您的要求不寻常,因为 Sn
和 T
听起来它们不是彼此克隆的,它们甚至可能没有任何共同的提交,在这种情况下这不是推/取场景。您还不能保证源文件更新每次提交都会发生一次,或者甚至分组但与非复制更改隔离,因此这与挑选提交无关。
复制的触发器是将某些文件推送到 S1
、S2
...,而不是对这些存储库的任何开发人员克隆的提交,因此客户端 -侧钩无济于事(而且维护起来可能很尴尬)。 GitHub 当然不允许通用 Hook ,因此 Webhooks 是您最好的解决方案。您可以考虑另一个定期从 S1
pull 的轮询克隆 ...,执行逻辑然后提交给 T,但这与 Webhooks 相比听起来很尴尬,后者将为您提供可靠的交付、重放能力,体面的审计跟踪等。
好处是有很多已经构建的基础设施来支持这种类型的设置,因此您需要编写的实际代码可能会非常少。假设您使用 Node.js
类型设置:
- 部署 github-webhook-handler .这个很酷的小库是 GitHub Webhooks 的预构建处理程序,处理 HMAC
X-Hub-Signature
验证并为所有 Webhooks 事件提供简单的事件监听器 Hook 。每个 S 可以有一个端点,或者将它们扇形展开可能更容易。 - 有一些将
Sn
映射到Fn
的本地文件(将其保存在 Git 存储库中)。 - 为
X-GitHub-Event: push
注册一个处理程序,并检查repository/name
和commits[]/modified[]
与您本地 map 匹配的路径。 - 部署 node-github , GitHub APIv3 的实现用于 Node.js。
- 对于每个匹配的文件:
- 调用getBlob从 Sn 读取文件的
utf-8
或base64
副本。 - 调用createBlob在
T
中重新创建该文件。 - 对 T 进行一系列调用 getReference (当前提交),getTree , createTree (从基础和新的 blob 创建一个新的),createCommit最后 updateReference .这是一个工作流 - 一个较低冲突的工作流是分支/merge 。
- 调用getBlob从 Sn 读取文件的
这种方法允许您在不需要 T
的本地克隆的情况下做任何事情。您可能会发现使用本地克隆更好,我会先看看 API 方法有多简单。
关于git - 自动将推送的文件从一个 GitHub 存储库复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400104/