使用post receive hook同步Git仓库
工作原因,笔者需实现多个Git仓库数据的同步。
前面我们已经讲过使用GitLab Mirrors同步多个Git仓库( http://www.itmuch.com/work/git-repo-sync-with-gitlab-mirrors/ ),不过毕竟是定时任务,有一定的延时。本文探讨如何使用post receive hook同步多个Git仓库。
方便起见:
- GitLab仓库(原始仓库):
http://192.168.1.102/root/test
- GitHub仓库(镜像仓库,开始是一个未经初始化的空仓库):
https://github.com/eacdy/test-can-del
下面演示如何同步。
原理比较简单,利用Git Hook中的post-receive
钩子,当提交代码到GitLab时会触发该钩子,指定我们编写的代码(本例中就是提交到镜像仓库啦)。
GitLab自定义Hook官方文档:https://docs.gitlab.com/ee/administration/custom_hooks.html。
1 在GitLab所在的机器,切换用户到git
GitLab默认使用的用户是git
,因此需要切换成git用户。
1 | su - git |
以下命令均使用git用户执行。
2 找到git用户的家目录
1 | su - git |
显示/var/opt/gitlab/
,说明该目录是git用户的家目录。
3 在git用户的家目录生成SSH key
1 | ssh-keygen # 生成SSH key,一路输入Enter键即可 |
4 为GitLab(镜像仓库)配置免密码登录
1 | more /var/opt/gitlab/.ssh/id_rsa.pub # 即:git用户家目录/.ssh/id_rsa.pub |
将内容贴到GitLab以及GitHub,方法比较简单,登录后找到SSH key的选项,然后粘贴即可。
执行如下命令,测试SSH key是否添加成功:
1 | ssh -T git@github.com |
如配置无误,会看到类似Hi eacdy! You've successfully authenticated, but GitHub does not provide shell access.
的文字。
5 添加镜像仓库
找到GitLab(原始仓库)的存储路径,并为原始仓库添加镜像仓库。
GitLab存储路径的规律如下:例如有一个仓库叫root/test4
,那么该仓库的存储路径则是:~/git-data/repositories/root/test.git
。
1 | cd /var/opt/gitlab/git-data/repositories/root/test.git/ |
6 同步仓库
在该目录下创建目录custom_hooks
,并新建文件post-receive
。
对于本例,执行的命令如下:
1 | mkdir custom_hooks |
在post-receive
中添加如下内容:
1 | #!/bin/bash |
7 完成
经过以上配置后,当我们执行命令提交到GitLab仓库时,代码也会同步提交到GitHub。
评论系统未开启,无法评论!