# git-hook-maven-plugin
**Repository Path**: Straydogggg/git-hook-maven-plugin
## Basic Information
- **Project Name**: git-hook-maven-plugin
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-10-23
- **Last Updated**: 2023-10-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Git hook maven plugin
Git可以在特定动作执行时触发自定义钩子脚本, 包括服务端脚本和客户端脚本。具体的钩子脚本编写说明可以参考: [自定义 Git - Git 钩子](https://www.git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90)
其中服务端钩子脚本可以统一在服务端配置, 针对所有用户都生效。而客户端脚本存在以下问题:
* 脚本存储于客户端, 并且无法纳入git管理, 每个人的脚本可以随意修改, 无法做到团队某些规范的推行;
* 一些优秀的脚本很难推广, 通过一种业界标准形式集成到项目中。
为此, 推出了该插件, 包括以下特点:
* 很方便的在项目中自定义团队的工作流, 把自定义钩子钩子脚本纳入git管理类, 方便团队共享;
* 把钩子脚本的安装集成到`Maven`的生命周期中的某个阶段, 方便的通过项目编译自动安装或者升级脚本;
* 提供通用的内置脚本, 方便钩子的配置, 目前只提供了`validate-commit-message`钩子脚本, 用于提交日志的规范, 遵循[AngularJS Git Commit Message Conventions](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#)的格式。
## 1、安装
在项目中引入插件即可:
```xml
com.itzhai.tools
git-hook-maven-plugin
1.0.0
git-hooks
validate-commit-message/validate-commit-message.sh
validate-code/validate-code.sh
compile
...
```
当然, 您也可以下载项目, deploy 插件到本地仓库或者私服:
从github上面下载该maven插件:
> git clone https://github.com/arthinking/git-hook-maven-plugin.git
该仓库包含两个项目:
> git-hook-maven-plugin
> git-hook-maven-plugin-demo
第一个项目是插件项目, 第二个项目是插件使用demo项目
通过`maven`安装`git-hook-maven-plugin`插件项目到本地仓库:
> mvn install
或者,您也可以推送到私服:
> mvn deploy
注意:deploy的时候,记得在项目的pom文件中配置私服地址:
```
my-releases
Nexus Release Repository
http://localhost/nexus/content/repositories/thirdparty
my-snapshots
Nexus Snapshot Repository
http://localhost/nexus/content/repositories/snapshots
```
## 2、设置
### 2.1、在Maven项目中引入插件
在maven项目中引入插件:
```xml
com.itzhai.tools
git-hook-maven-plugin
1.0-SNAPSHOT
git-hooks
validate-commit-message/validate-commit-message.sh
validate-code/validate-code.sh
compile
...
```
### 2.2、插件`configuration`配置说明
#### 2.2.1、ghooks标签
在该标签下面配置git hook。
#### 2.2.2、commit-msg标签
该标签是git hook钩子标签,目前可用的钩子标签如下:
```
applypatch-msg
pre-push
commit-msg
pre-rebase
post-update
prepare-commit-msg
pre-applypatch
update
pre-commit
```
### 2.2.1、配置内置钩子脚本
目前提供的内置钩子脚本有:
* [validate-commit-message/validate-commit-message.sh](https://github.com/arthinking/git-hook-maven-plugin/tree/master/git-hook-maven-plugin/src/main/resources/validate-commit-message)
`validate-commit-message/validate-commit-message.sh`钩子脚本, 该脚本主要用于校验提交日志的格式规范, 遵循[AngularJS Git Commit Message Conventions](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#)的格式。
一般在`ghooks`标签中配置git hook脚本标签, 上面例子中配置了`commit-msg`和`pre-commit`钩子标签, 内置的钩子脚本, 可以直接配置使用:
```xml
validate-commit-message/validate-commit-message.sh
```
钩子标签值的格式:
> 钩子脚本所在文件夹/脚本文件
### 2.2.2、配置自定义钩子脚本
当然, 您也可以配置自己编写的钩子脚本, 脚本的可以是python, shell, perl等格式。在git项目根目录创建一个`ghooks`文件夹把脚本文件放置到该文件夹中:
```
git-hook-maven-plugin-demo
|-ghooks
|-validate-code
|--validate-code.sh
|--README.md
|--src
|--main
|--java
...
```
如上目录结构, 假设该脚本是`pre-commit`钩子, 则可以这样配置:
```xml
validate-code/validate-code.sh
```
建议自定义脚本放置到单独的文件夹中, 如上面的`validate-code`文件夹, 同时提供`README`文件, 阐述脚本的用途, 以及适用于什么钩子。
> 注意: 自己编写脚本的时候, 需要在脚本文件头的注释中声明脚本的版本, 插件检查到脚本版本有变更, 会自动更新项目的钩子脚本。格式如:
```python
! /usr/bin/env python
# Just for pre-commit hook
# hook.version@1.0.2
import sys,os,re
```
详细说明参考: [Git hook介绍](https://git-scm.com/docs/githooks)
## 3、运行
Maven插件的运行依赖于插件配置中的`phase`标签, 该标签声明了此插件会在Maven生命周期的哪一个阶段执行, 比如上面的例子就会在编译期间自动触发。
# References
- [自定义 Git - Git 钩子](https://www.git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90)
- [Plugin Developers Centre](https://maven.apache.org/plugin-developers/index.html)