这个需求大概是这样的,代码从本地推送到服务器A时,希望改动能够推送到服务器B上。
为了满足这个需求我们可以使用git服务端的post-receive钩子,但是我并没有采用,其一是这个钩子在服务器没有执行完的时候是不会返回结果的,而push的客户端会一直等待这个钩子执行完毕。这样反而会减慢推送速度。其二是我使用的Git服务器软件在Windows上对git钩子脚本的支持不够好。(用的Gogs,在Windows上一直报错: file does not exist)
因此我使用了webhook。在webhook中填写请求地址,我这里直接写了 域名+端口号 ,然后用Cpp写了一个小程序监听这个端口。设置Webhook调用时机为push事件。这样,服务器A在收到push的时候,会执行这个小程序。在小程序里进行了clone+push B的操作。试了一下,还是很好用的。
由于并没有搜到相关问题的解决先例,就暂且定名为被动式镜像啦~