自动将推送的文件从一个GitHub存储库复制到另一个存储库

Dra*_*rax 23 git github githooks github-api

我有两个GitHub存储库.

我想自动(可能使用钩子和/或github API)提交并将文件推送到第二个存储库,当它们被推送到第一个存储库时.

第二个存储库不是第一个存储库的克隆,它们的文件夹布局不一定相同,只有一堆共同的文件.

这样做最简单的方法是什么?

如果我不需要安装http服务器或学习perl,奖励积分:)

jav*_*ett 9

如果您正在寻找强大且易于维护的东西,我建议您围绕GitHub Webhooks开发解决方案.是的,它需要你部署一个HTTP服务器,比如一个Node.js服务器,它需要少量的开发(你的要求是相当具体的),但我认为如果你需要一些可靠和低的东西它会得到回报-保养.如果您认为这种文件镜像方法仍然是正确的做法,那就考虑了方法和设置工作.

让源存储库(在GitHub上)S1,S2......(非重叠)文件集镜像F1,F2...,发送到目标存储库T(也在GitHub上),其中相应的文件被认为是读取的只要.你的要求是不寻常SnT听起来像他们没有彼此,其他克隆,他们甚至可能没有任何共同的承诺,在这种情况下,这不是一个推/取场景.您还无法保证源文件更新发生一次提交,甚至分组但与非复制更改隔离,因此这不是关于挑选提交.

复制触发器是在某些文件的推动S1,S2......,不提交这些回购的任何开发人员克隆,所以客户端挂钩不会帮助(他们可能会很难维持).GitHub当然不允许使用通用钩子,所以Webhooks是你最好的解决方案.您可以考虑另一个轮询克隆,它定期从S1...中执行,执行逻辑然后提交到T,但与Webhooks相比,这听起来很尴尬,这将为您提供可靠的交付,重放功能,体面的审计跟踪等.

好处是有很多已经构建的基础设施来支持这种类型的设置,因此您必须编写的实际代码可能非常小.假设您使用Node.js类型设置:

  • 部署github-webhook-handler.这个很酷的小库是GitHub Webhooks的预构建处理程序,它处理HMAC X-Hub-Signature验证并为所有Webhooks事件提供简单的事件监听器挂钩.每个S可以有一个端点,或者可能更容易将它们扇入.
  • 有一些映射Sn到的本地文件(保存在Git仓库中)Fn.
  • 注册一个处理程序X-GitHub-Event: push,并检查repository/namecommits[]/modified[]匹配您的本地地图路径.
  • 部署node-github,Node.js 的GitHub APIv3的实现.
  • 对于每个匹配的文件:

这种方法允许您在不需要本地克隆的情况下完成所有操作T.你可能会发现使用本地克隆会更好,我会先看看API方法有多简单.

在此输入图像描述


小智 8

我们遇到了类似的问题 - 我们希望在项目和通用文档的存储库之间自动复制文档文件.我们构建了一个工具,可以监听GitHub的webhook,解析提交并创建Pull Request到选定的目的地. 模仿架构 我们已经开源了 - https://github.com/livechat/copycat - 它可以在任何节点平台服务器上使用.


Kla*_*urn 6

编辑:我现在意识到问题是关于GitHub.我的答案是关于你有文件访问权限的标准git存储库.

我假设第二个回购是第一个的克隆,创建了这样的东西

git clone --bare first.git second.git
Run Code Online (Sandbox Code Playgroud)

将当前目录更改为first.git存储库内部,并将其添加second.git为远程目录.

cd first.git
git remote add second ../second.git
Run Code Online (Sandbox Code Playgroud)

然后,在first.git/hooks/名为的文件夹中创建一个文件post-receive(您可以重命名该post-receive.sample文件)

内容应该是这个

#!/bin/sh
git push second
Run Code Online (Sandbox Code Playgroud)

现在,当您将新提交推送到第一个存储库时,将立即执行从第一个到第二个存储的推送,以便第二个接收提交.


Von*_*onC 6

单独两个GitHub存储库(没有第三方服务器监听webhook事件)不能互相镜像.

您需要在一个GitHub存储库上注册webhook以检测推送事件,然后推送到第二个GitHub存储库.

这意味着拥有一个侦听webhook json有效负载的服务器.

类似的工具dustin/gitmirror可以帮助(在Go中).