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)

相关推荐
fruge4 小时前
git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行
大数据·git·elasticsearch
_OMG_5 小时前
Git 高效同步远程分支与本地分支清理技巧
git
心无旁骛~6 小时前
Git笔记汇总,持续更新~
笔记·git
{⌐■_■}14 小时前
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
大数据·git·elasticsearch·golang·iphone·ip·etcd
李狗蛋儿啊16 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
人工干智能18 小时前
科普:“git“与“github“
git·github
drebander20 小时前
Maven 构建中的安全性与合规性检查
java·maven
drebander20 小时前
Maven 与 Kubernetes 部署:构建和部署到 Kubernetes 环境中
java·kubernetes·maven
丁总学Java1 天前
在IDEA的Maven中(同步所有Maven项目)和(重新加载所有Maven项目)的区别
java·maven·intellij-idea
灬Change1 天前
maven 发布本地jar包到私库
linux·maven·jar