使用post receive hook同步Git仓库

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 工作原因,笔者需实现多个Git仓库数据的同步。前面我们已经讲过使用GitLab Mirrors同步多个Git仓库( http://www.itmuch.com/work/git-repo-sync-with-gitlab-mirrors/ ),不过毕竟是定时任务,有一定的延时。

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

如配置无误,会看到类似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。

参考文档

本文链接: http://www.itmuch.com/work/git-repo-sync-with-post-receive/
**版权声明: **本博客由周立创作,采用 CC BY 3.0 CN 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何将个人账号下的Git仓库转移到企业账号下
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
IDE 网络安全 开发工具
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
|
28天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
45 2
|
2月前
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
171 1
git学习三:git使用:删除仓库,删除仓库内文件
|
2月前
|
开发工具 git 索引
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
83 4
|
2月前
|
前端开发 开发工具 git
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
35 5
|
2月前
|
存储 开发工具 git
Git 远程仓库地址管理:添加、修改和验证
Git 远程仓库地址管理:添加、修改和验证
90 4
|
2月前
|
编译器 开发工具 数据安全/隐私保护
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
本文提供了一个关于如何在Gitee上进行多人协作和版本控制的详细教程,包括新建和初始化仓库、克隆仓库、邀请好友共同管理仓库以及注意事项,旨在帮助用户顺利进行代码协作开发。
302 0
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
|
3月前
|
开发工具 git
IDEA更改远程git仓库地址
【9月更文挑战第27天】本文介绍了两种在IntelliJ IDEA中更改远程Git仓库地址的方法:一是通过图形界面,在VCS设置中直接修改;二是通过IDEA内置的命令行工具使用`git`命令进行更改。具体步骤包括从版本控制菜单进入项目设置、修改远程仓库URL,以及使用`git remote set-url`命令更新仓库地址,并验证修改结果。这些方法适用于项目迁移或更换仓库地址的情况。
643 6
|
3月前
|
Linux 开发工具 git
linux自建仓库git之钩子不生效
linux自建仓库git之钩子不生效