Git服务器,仓库的hook监控

简单应用场景:代码提交到git仓库,仓库监控到变化的jar包,然后把变化的jar包推到私服maven仓库。

Git预定义了触发时机:

ClientSide hooks:

1 pre-commit,当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。

2 prepare-commit-msg, 当commit时需要输入message前会触发此hook,可以用此hook来定制自己的default message信息。

3 commit-msg,当用户输入commit的message后被触发,可以用此hook校验message的信息,比如是否符合规定,有没有cr等。

4 post-commit, 当commit完成后被触发,可以用此hook发送notification等。

5 pre-rebase, rebase之前会被触发,可以用此hook来拒绝所有的已经push的commits进行rebase操作。

6 post-merge, 当merge成功后,会触发此hook。

7 pre-push, 当push时,remote refs被更新,但是在所有的objects传输前被触发。

8 pre-auto-gc, 当git gc --auto执行前被触发。在垃圾回收之前做一些验证或备份是挺不错的。

ServerSide hooks:

1 pre-receive, 当收到push动作之前会被执行。

2 update, 也是收到push动作之前被执行,但是有可能被执行多次,每个branch一次。

3 post-receive, 当push动作已经完成的时候会被触发,可以用此hook来push notification等,比如发邮件,通知持续构建服务器等。

简单解决方案(git仓库使用的是裸仓库):由于裸仓库不保存实际文件,只保存变化过程。所以在检测到仓库有变化是,需要先把变化git pull到服务器的另外一个单独的目录,这样才能获取到实际存在仓库的代码或者文件,之后再deloy到私服。在钩子脚本post-receive阶段使用read oldValue newValue refName 获取到变化之前的commitId1 和变化后的commitId2,然后执行git diff commitId1 commitId2 --name-only 得到变化的文件,然后使用mvn deloy 把变化的文件推到仓库。

注意点

  1. 在 post-receive阶段调用git pull报错 提示 fatal: Not a git repository: ‘.‘ 。需要在最前面加上unset $(git rev-parse --local-env-vars)
  2. 在 post-receive脚本中无法调用mvn自己设定的环境变量问题,可以使用软连接,把自己设置的环境变量软链到以下提示的目录,比如/usr/local/bin

原文地址:https://www.cnblogs.com/hts-technology/p/9931787.html

时间: 2024-10-26 04:59:17

Git服务器,仓库的hook监控的相关文章

git 服务器搭建,在自己服务器上搭建私有仓库

创建一个简单的私人Git版本控制服务器,首先得有个服务器(屁话).这种方式适合人比较少的情况,管理不需要很复杂,只要增加几个账号就能搞定. 如下面的情况,有一个服务器,两个客户端. 服务器:Debian7.5 (192.168.10.14) 用 户:git (git-shell) 仓 库:sample.git 地 址:[email protected].168.10.14:/home/git/sample.git 客户端:Mac mymac.pub(mac git公钥) win7 mywin.p

ubuntu完美搭建git服务器【转】

转自:http://blog.csdn.net/tommy_wxie/article/details/38779667 最近公司项目需要用到Git来管理项目,正好逢周末花了点时间在虚拟机的unbuntu系统中搭建了下git的服务器,由于搭建过程中多多少少遇到了一些小问题,再因为个人记性不太好,所以在这里记录下来,以备不时之需.开始我已经在虚拟机的ubuntu12.04系统下已经装过一次,忘了记录,这次重新再在虚拟机的ubuntu13.10系统下一步一步的来搭建,后面介绍包括了在客户端机器(宿主机

不搭建git服务器对git仓库进行局域网内共享多人合作开发项目

有时候在一个临时局域网内没有搭建git服务器,但是又想多人开发一个项目,此时只要每个人电脑安装有git客户端,参考一下方法即可尝试建一个本地化的远程仓库进行多人开发工作. 远程仓库通常只是一个裸仓库(bare repository)-- 即一个没有当前工作目录的仓库.因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照:仓库里存放的仅仅是 Git 的数据.简单地说,裸仓库就是你工作目录中.git 子目录内的内容. 以上文字的意思就是,仓库必须是裸的.我们先从创建裸仓库开始: 1.首先

git服务器新增仓库

在已有的git库中搭建新的库,并将本地的git仓库,上传到服务器的git库中,从而开始一个新的项目. 首先是在本地操作: 在本地新建文件夹spider,进入到spider中:如下 下一步登录到远程的服务器中: 登录到远程的git服务器上,到你要创建仓库的位置然后进入spider.git目录. git  --bare init.这样就在服务器端建立了一个空的git项目. 然后回到本地: git remote -v 显示项目目前的远程仓库,因为是新建项目,所以结果为空. 然后下面继续: 有错误解决,

Git服务器宕机如何使用本地克隆仓库快速恢复Git服务器

在工作中难免会出现代码仓库不能使用如:服务器磁盘跪了,高可用失效,地区级别的网络瘫痪,等等. 之前也听过Git的一大亮点为去中心话的可靠代码仓库,那么问题来了: 代码库真的宕机了,连不上了,在短时间内需要团队开发合并代码,协作开发,发布版本,笔者在网上搜索一圈没有人写过类似文章(也有可能大家都觉得这个太简单了),故写下自己意淫的方法,以及自己亲身的实施步骤: 好,现在问题来了,已经推不上去了,没办法和其他开发互动了 解决思路: 需要一个临时服务器来代替原先的宕机的服务器上面(可以是你自己的本机)

git知识总结-4.git服务器搭建及迁移git仓库

1. 前言 因为手里有一份代码之前是直接从其它git服务器上克隆下来的,现在想自己搭建一个git服务器把这份代码管起来. 2. 搭建git服务器 1.安装git: $ sudo apt-get install git 2. 创建一个git用户,用来运行git服务: $ sudo adduser book 3. 创建证书登录 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/book/.ssh/authorized_keys文件里,一行一个. 此处可

Centos6.4 搭建Git服务器 (最简单的方法)

下载 git-1.8.2.tar.gz tar -zvxf git-1.8.2.tar.gz cd git-1.8.2.2 sudo make prefix=/usr/local/git all sudo make prefix=/usr/local/git install git –version 查看版本 以上是服务器安装. 下面是建库. centos服务器上建库及测试 mkdir /git cd /git git –bare init //建立空仓库 git ssh-keygen (建本地

git服务器的搭建

http://blog.jobbole.com/25944/ 1,概念 git服务器:就是一个仓储,一个大家都可以访问的公共仓储,大家可以从这个仓储中拉取和推送数据. 协议: 与gist服务通讯的仓储的协议 ,四种 ,本地协议,SSH协议,git协议,http协议 裸仓储:一个只有版本信息,没有工作目录的仓储.也就是只有工作仓储中git里面的内容   (这个有一个问题,那client1从client2中拉取 1.txt,是从哪里来的) 本地协议:   git clone /opt/git/git

如何在服务器上搭建git服务器

参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000 http://wlog.cn/soft/git-ssh-server-for-debian.html 在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就