Dra*_*rax 23 git github githooks github-api
我有两个GitHub存储库.
我想自动(可能使用钩子和/或github API)提交并将文件推送到第二个存储库,当它们被推送到第一个存储库时.
第二个存储库不是第一个存储库的克隆,它们的文件夹布局不一定相同,只有一堆共同的文件.
这样做最简单的方法是什么?
如果我不需要安装http服务器或学习perl,奖励积分:)
如果您正在寻找强大且易于维护的东西,我建议您围绕GitHub Webhooks开发解决方案.是的,它需要你部署一个HTTP服务器,比如一个Node.js服务器,它需要少量的开发(你的要求是相当具体的),但我认为如果你需要一些可靠和低的东西它会得到回报-保养.如果您认为这种文件镜像方法仍然是正确的做法,那就考虑了方法和设置工作.
让源存储库(在GitHub上)S1
,S2
......(非重叠)文件集镜像F1
,F2
...,发送到目标存储库T
(也在GitHub上),其中相应的文件被认为是读取的只要.你的要求是不寻常Sn
和T
听起来像他们没有彼此,其他克隆,他们甚至可能没有任何共同的承诺,在这种情况下,这不是一个推/取场景.您还无法保证源文件更新发生一次提交,甚至分组但与非复制更改隔离,因此这不是关于挑选提交.
复制触发器是在某些文件的推动S1
,S2
......,不提交这些回购的任何开发人员克隆,所以客户端挂钩不会帮助(他们可能会很难维持).GitHub当然不允许使用通用钩子,所以Webhooks是你最好的解决方案.您可以考虑另一个轮询克隆,它定期从S1
...中执行,执行逻辑然后提交到T,但与Webhooks相比,这听起来很尴尬,这将为您提供可靠的交付,重放功能,体面的审计跟踪等.
好处是有很多已经构建的基础设施来支持这种类型的设置,因此您必须编写的实际代码可能非常小.假设您使用Node.js
类型设置:
X-Hub-Signature
验证并为所有Webhooks事件提供简单的事件监听器挂钩.每个S可以有一个端点,或者可能更容易将它们扇入.Sn
到的本地文件(保存在Git仓库中)Fn
.X-GitHub-Event: push
,并检查repository/name
和commits[]/modified[]
匹配您的本地地图路径.utf-8
或base64
复制文件.T
.这种方法允许您在不需要本地克隆的情况下完成所有操作T
.你可能会发现使用本地克隆会更好,我会先看看API方法有多简单.
小智 8
我们遇到了类似的问题 - 我们希望在项目和通用文档的存储库之间自动复制文档文件.我们构建了一个工具,可以监听GitHub的webhook,解析提交并创建Pull Request到选定的目的地.
我们已经开源了 - https://github.com/livechat/copycat - 它可以在任何节点平台服务器上使用.
编辑:我现在意识到问题是关于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)
现在,当您将新提交推送到第一个存储库时,将立即执行从第一个到第二个存储的推送,以便第二个接收提交.
单独两个GitHub存储库(没有第三方服务器监听webhook事件)不能互相镜像.
您需要在一个GitHub存储库上注册webhook以检测推送事件,然后推送到第二个GitHub存储库.
这意味着拥有一个侦听webhook json有效负载的服务器.
类似的工具dustin/gitmirror
可以帮助(在Go中).