工作原因,笔者需实现多个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用户。

su - git

以下命令均使用git用户执行。

2、找到git用户的家目录

su - git
cd ~
pwd

显示/var/opt/gitlab/ ,说明该目录是git用户的家目录。

3、在git用户的家目录生成SSH key

ssh-keygen  # 生成SSH key,一路输入Enter键即可

4、为GitLab(镜像仓库)配置免密码登录

more /var/opt/gitlab/.ssh/id_rsa.pub   # 即:git用户家目录/.ssh/id_rsa.pub

将内容贴到GitLab以及GitHub,方法比较简单,登录后找到SSH key的选项,然后粘贴即可。

执行如下命令,测试SSH key是否添加成功:

ssh -T git@github.com

将内容贴到GitLab以及GitHub,方法比较简单,登录后找到SSH key的选项,然后粘贴即可。

执行如下命令,测试SSH key是否添加成功:

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

cd /var/opt/gitlab/git-data/repositories/root/test.git/
git remote add --mirror=push github git@github.com:eacdy/test-can-del.git

6、同步仓库

在该目录下创建目录custom_hooks ,并新建文件post-receive 。

对于本例,执行的命令如下:

mkdir custom_hooks
cd custom_hooks
touch post-receive
chmod -R 755 post-receive   # 这一步非常重要,必须为该文件赋予可执行权限

post-receive 中添加如下内容:

#!/bin/bash
echo "$USER"
exec git push -u github &

7、完成

经过以上配置后,当我们执行命令提交到GitLab仓库时,代码也会同步提交到GitHub。

git使用之(七)使用post receive hook同步Git仓库相关推荐

  1. linux git 2.5.1安装,Git for Windows 2.5.1发布,同步Git 2.5.1

    Git for Windows 2.5.1发布,同步Git 2.5.1 发布时间:2015-09-02 11:44:14来源:红联作者:empast Git for Windows 2.5.1 发布, ...

  2. Git 系列(七):使用 Git 管理二进制大对象

    通过这系列的前六篇文章,我们已经学会使用 Git 来对文本文件进行版本控制的管理.我们不禁要问,还有二进制文件呢,也可进行进行版本控制吗?答案是肯定的,Git 已经有了可以处理像多媒体文件这样的二进制 ...

  3. Git系列(七):使用Git管理二进制大对象

    通过这系列的前六篇文章,我们已经学会使用 Git 来对文本文件进行版本控制的管理.我们不禁要问,还有二进制文件呢,也可进行进行版本控制吗?答案是肯定的,Git 已经有了可以处理像多媒体文件这样的二进制 ...

  4. Git学习系列(七)Bug和Feature分支管理详解

    当咱们拿到一个新的bug或者feature(功能)时,首先应该想到通过分支来完成咱们的任务.因为在软件开发中,总是会根据客户的需求不断的添加新的feature进来,同时在做移动开发过程中bug也可以说 ...

  5. Git 基础(七)—— 远程仓库(GitHub)

    远程仓库 第1步:创建 SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打 ...

  6. Git之深入解析如何借助Git的配置方法和钩子机制来自定义Git需求

    一.前言 到目前为止,我们已经了解了 Git 基本的运作机制和使用方式,学习了许多 Git 提供的工具简单且有效地使用它,可以高效地帮助我们工作,提升我们的效率. 如果还不清楚 Git 的基础使用流程 ...

  7. 【Git从青铜到王者】第三篇:Git的基础

    系列文章目录 文章目录 系列文章目录 前言 一.获取 Git 存储库 1.在现有目录中初始化存储库 2.克隆现有存储库 二.Git记录每次更新到仓库 1.记录每次更新到仓库 2.检查当前文件状态 3. ...

  8. git for windows_干货分享 | 嵌入式必备技能之Git的使用

    编者荐语:连代码都管理不好的程序员不是好程序员! 代码版本控制对于我们嵌入式软件开发岗是一项基础.必备需要熟练掌握的技能.实际工作中常用的版本控制系统有:Git(分布式版本控制系统)与SVN(集中式版 ...

  9. Git使用教程:真正手把手教你使用git!

    预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 工作原理 / 流程: Workspace:工作区 Index / ...

最新文章

  1. Apache Flink 零基础入门(十七)Flink 自定义Sink
  2. Java实现螺旋矩阵
  3. 分布式实时计算—实时计算相关问题及解决方案
  4. qt调用html里面的函数吗,QT和JS的互相调用例子
  5. (十七)深入浅出TCPIP之HTTP和HTTPS
  6. 前沿 | 使用Transformers进行端到端目标识别
  7. C#中gridView常用属性和技巧介绍
  8. Spring Boot 前端传json数组,后台接收处理
  9. 一些关于angular的总结
  10. SAE实践——用SVN命令行同步/提交代码
  11. keras模型训练参数
  12. 柠檬班软件测试002软件测试的定义
  13. C#毕业设计——基于C#+asp.net+SQL server的物料管理系统(ERP)设计与实现(毕业论文+程序源码)——物料管理系统(ERP)
  14. 根据出生年日计算年龄
  15. Jmeter查看QPS和响应时间随着时间的变化曲线
  16. Counter对numpy数组进行统计
  17. 安装win7时,出现“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”的处理方式
  18. USER_TAB_COLS,USER_TAB_COLUMNS,ALL_TAB_COLS,ALL_TAB_COLUMNS获取数据库元素的区别
  19. wps 符号操作(仅符号)
  20. 关键字驱动自动化测试

热门文章

  1. Matlab做电路系统设计仿真
  2. 如何查阅Spark文档
  3. 思科路由器高危漏洞可导致攻击者完全访问小企业网络
  4. 态路小课堂丨浅谈IDC数据中心综合布线互联
  5. 十八、指数启动初期龙头选股法
  6. 护眼灯值不值得买?2022年国家认可护眼灯品牌
  7. latex 转 word
  8. 计算机专业答辩讲稿,计算机专业毕业论文答辩陈述稿
  9. 5个理由让你选择Go,抛弃Python
  10. 只需5分钟看完这篇 HTTPS,去阿里面试和面试官扯皮就没问题了!