maven 项目添加 git-hook 脚本,约束提交内容格式

git 提交代码,推送代码,可以通过在 .git/hooks 目录中的 bash 脚本来做一定的验证工作。

本例使用插件 maven-antrun-plugin 自动输出脚本至 .git/hooks 目录中,在 pom.xml 中的使用示例如下:

xml 复制代码
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>gen-gitbash-clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>gen-gitbash-compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- configuration没有放在execution里面是让多个execution都能执行 -->
                <configuration>
                    <target>
                        <!-- 生成commit-msg文件 -->
                        <echo file="${basedir}/.git/hooks/commit-msg"
                              message="#!/usr/bin/env bash${line.separator}${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="# Color codes${line.separator}red='\033[0;31m'${line.separator}yellow='\033[0;33m'${line.separator}blue='\033[0;34m'${line.separator}NC='\033[0m' # No colors"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="${line.separator}${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="# Regex &amp; Usage${line.separator}commit_regex=&quot;^(\[[A-Za-z]+\-[0-9]+\]|merge|Merge)\s&quot;${line.separator}error_message=&quot;Aborting commit. Commit message must start with ${yellow} 开发任务编号&quot;${line.separator}usage=&quot;开发任务编号 Commit Message. \n${blue}示例: [TASK-101] 完成A功能开发&quot;"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="${line.separator}${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="if ! grep -qE &quot;$commit_regex&quot; &quot;$1&quot;; then${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="  printf &quot;${red}$error_message\n&quot;${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="  printf &quot;${yellow}Commit Regex: ${NC}${commit_regex}\n&quot;${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="  printf &quot;${red}Usage: ${NC}${usage}\n&quot;${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/commit-msg" append="true"
                              message="  exit 1${line.separator}fi"/>

                        <!-- 生成pre-push文件 -->
                        <echo file="${basedir}/.git/hooks/pre-push"
                              message="#!/usr/bin/env bash${line.separator}${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="# Color codes${line.separator}red='\033[0;31m'${line.separator}yellow='\033[0;33m'"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="${line.separator}${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="command=&quot;./mvnw.cmd clean test&quot;${line.separator}${command}"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="${line.separator}${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="if ! [ $? -eq 0 ]; then${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="  printf &quot;${red}Make sure successfully execute command: ${yellow}$command${red}.&quot;${line.separator}"/>
                        <echo file="${basedir}/.git/hooks/pre-push" append="true"
                              message="  exit 1${line.separator}fi"/>

                        <!-- 设置权限 -->
                        <chmod dir="${basedir}/.git/hooks" perm="755" includes="**/*"/>
                    </target>
                </configuration>
            </plugin>

在执行maven的 clean 或者 compile 时候,插件会自动输出 commit-msgpre-push 两个脚本文件


(END)

相关推荐
Sapphire~7 分钟前
odoo-049 Pycharm 中 git stash 后有pyc 文件,如何删除pyc文件
ide·git·pycharm
极小狐2 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
Meta393 小时前
解决IDEA Maven编译时@spring.profiles.active@没有替换成具体环境变量的问题
spring·maven·intellij-idea
Willis_m4 小时前
Linux 服务器用 SSH 拉取多个 Git 工程
linux·服务器·git·ssh
1candobetter4 小时前
git如何将本地 dev 分支与远程 dev 分支同步
git
此方konata4 小时前
git常用命令
git
yuanbenshidiaos12 小时前
讲讲git 和svn
git·svn
计算机学姐13 小时前
基于SpringBoot的小区停车位管理系统
java·vue.js·spring boot·后端·mysql·spring·maven
刃神太酷啦14 小时前
类和对象(1)--《Hello C++ Wrold!》(3)--(C/C++)
java·c语言·c++·git·算法·leetcode·github
console.log('只想发财')14 小时前
新手安装java所有工具(jdk、idea,Maven,数据库)
java·maven·intellij-idea