git hooks 使用
配置管理示意图
git hooks 使用说明
-
客户端 hooks
- pre-commit 钩子在键入提交信息前运行。
- prepare-commit-msg 钩子在启动提交信息编辑器之前,默认信息被创建之后运行。
- post-commit 钩子在整个提交过程完成后运行。
- applypatch-msg 你可以用该脚本来确保提交信息符合格式,或直接用脚本修正格式错误。
- pre-applypatch 在 git am 运行期间被调用
- post-applypatch 运行于提交产生之后,是在 git am 运行期间最后被调用的钩子。
- pre-rebase 钩子运行于变基之前,以非零值退出可以中止变基的过程。
- post-rewrite 钩子被那些会替换提交记录的命令调用。
- post-checkout 在 git checkout 成功运行后调用。
- post-merge 在 git merge 成功运行后调用。
- pre-push 在 git push 运行期间, 更新了远程引用但尚未传送对象时被调用。
- pre-auto-gc 会在垃圾回收开始之前被调用,可以用它来提醒你现在要回收垃圾了,或者依情形判断是否要中断
-
服务端 Hooks
- pre-receive 处理来自客户端的推送操作时最先被调用。
- update 它会为每一个准备更新的分支各运行一次。
- post-receive 在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。
测试验证
服务器 | 功能 | 目录结构 |
---|---|---|
10.90.11.227 | 系统管理员本地仓库 | /software/process_config |
172.31.4.123 | 中转仓库/数据存放仓库 | 中转仓库: /software/workspace/project 数据存放仓库: /software/workspace/project-local/project |
-
初始化中转仓库
git init 和 git init --bare 的区别
初始化出来的仓库是不一样的,前者初始化的是一个普通的仓库,其中 .git 文件夹是隐藏的,并且能看见该仓库下所有的源码。而后者初始化出来的仓库中的文件,就是 .git 中的文件夹,但不能像前者那样直接浏览或修改仓库中的代码。$ mkdir /software/workspace/project $ cd /software/workspace/project $ git init --bare **结果:** -rw-r--r-- 1 root root 23 Apr 25 06:10 HEAD drwxr-xr-x 2 root root 6 Apr 25 06:10 branches -rw-r--r-- 1 root root 66 Apr 25 06:10 config -rw-r--r-- 1 root root 73 Apr 25 06:10 description drwxr-xr-x 2 root root 4096 Apr 25 10:27 hooks drwxr-xr-x 2 root root 20 Apr 25 06:10 info drwxr-xr-x 41 root root 4096 Apr 25 10:26 objects drwxr-xr-x 4 root root 29 Apr 25 06:10 refs
-
初始化数据存储仓库--其实就是做中转仓的检出
$ cd /software/workspace/project-local $ git clone /software/workspace/project drwxr-xr-x 6 root root 72 Apr 26 00:08 project
-
配置中转仓-- hooks
$ cd /software/workspace/project/hooks $ cat post-receive # 系统管理员每次提交时指定 remote 仓库 后自动触发 hooks 执行以下代码 必须有执行权限 #!/bin/sh cd /software/workspace/project-local/project || exit echo ${GIT_DIR} unset GIT_DIR /usr/bin/git pull echo "pull successful 172.31.4.123"
-
系统管理员本地仓库添加remote 源
# 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。 $ git clone -o source http://gitlab.product.co-mall:10080/liuyulong/process_configure.git $ git remote add deploy root@172.31.4.123:/software/workspace/project # root为系统账户 $ git remote -v deploy root@172.31.4.123:/software/workspace/project (fetch) deploy root@172.31.4.123:/software/workspace/project (push) source http://gitlab.product.co-mall:10080/liuyulong/process_configure.git (fetch) source http://gitlab.product.co-mall:10080/liuyulong/process_configure.git (push)
-
系统管理员本地仓库提交测试
$ vim nginx.conf $ git add . $ git commit -m "test hooks" [master 7b05314] test hooks 1 file changed, 1 insertion(+) $ git push deploy # 此处如果想直接全部提交到远程仓库进行如下配置 ######## git remote set-url --add --push origin http://gitlab.product.co-mall:10080/liuyulong/process_configure.git git remote add both root@172.31.4.123:/software/workspace/project git remote set-url --add --push both http://gitlab.product.co-mall:10080/liuyulong/process_configure.git git remote set-url --add --push both root@172.31.4.123:/software/workspace/project git push both ######## Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 457 bytes | 0 bytes/s, done. Total 4 (delta 1), reused 0 (delta 0) # 以下都是自定义 hooks 脚本返回的信息 remote: . remote: 来自 /software/workspace/project remote: 7c07381..7b05314 master -> origin/master remote: 更新 7c07381..7b05314 remote: Fast-forward remote: nginx/nginx.conf | 1 + remote: 1 file changed, 1 insertion(+) remote: pull successful 172.31.4.123 To root@172.31.4.123:/software/workspace/project 7c07381..7b05314 master -> master lonny@LonnyLiuMacPro ~/Documents/process_configure/nginx (git)-[master] %
配置文件管理完毕