G
N
I
D
A
O
L

自动化部署项目hook

在研究如何更好使用git log的过程中,学习了很多非常强有力的技能,这些技能极大地方便了我们对项目的管理,更好、更加规范、更加流程的帮助我们管理一个项目从开发到维护的过程。😛

看到一篇文章,讲了关于git commit的信息填写的格式进行规范。git 的 hook 操作强大到难以置信,效率为王!

文章中还讲到了如何使用自动化部署对项目团队中每个人的git commit进行规范,闲来无事玩两下,借着这篇文章,我就开始了并不是自动化的“自动化”,简单的几句代码,却是几个小时的尝试,从sample到批处理命令的编写,都是泪啊~~~

其中关于如何获取文件路径的尝试也是耗费不少时间,尝试几次之后才得以成功。

前言

首先列出期间我用到的几个网站,以便你操作的时候查阅相关的资料

  1. 批处理入门手册_w3cschool,w3c对于批处理的各个命令的解说挺详细的,但是排版太难看,实在是不忍下眼,但是作为手册,还是有参考的价值,“环境变量延迟扩展”一节对文件路径的修改与获取相对重要一点,可以先看一下。
  2. 批处理获取路径_weixin_30952103的博客-CSDN博客,这篇博客对批处理中文你的bat文件在e:/mybat/test.bat,则%0就是e:/mybat/test.bat, %~dp0e:/mybat/

关于钩子(hooks)

钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks 。 当你用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。 这些脚本除了本身可以被调用外,它们还透露了被触发时所传入的参数。 所有的示例都是 shell 脚本,其中一些还混杂了 Perl 代码,不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或任何你熟悉的语言编写它们。 这些示例的名字都是以 .sample 结尾,如果你想启用它们,得先移除这个后缀。

sample文件

在开头提及的那篇文章中关于commit-msg的代码已经有说明,感兴趣的同学可以自己去研究怎么写这个脚本。当然,除了commit-msg还有其他几个脚本用来规范你的项目部署。git hooks即git 钩子,都是以sample结尾的脚文件,存放在.git/hooks目录下。最终要做的事情也是将写好的脚本文件存放到hooks目录下。

如下图所示的smaple文件都可以通过自定义的形式实现相应的功能。

hooks文件说明

这里添加一个我从不知名博客找到的一段commit-msg的代码行:

#!/bin/bash
MSG=`awk '{printf("%s",$0)}' $1`
if [[ $MSG =~ ^(feat|fix|test|refactor|docs|style|chroe)\(.*\):.*$ ]]
then
	echo -e "\033[32m commit success! \033[0m"
else
    echo -e "\033[31m Error: the commit message is irregular \033[m"
	  echo -e "\033[31m Error: type must be one of [feat,fix,docs,style,refactor,test,chore] \033[m"
    echo -e "\033[31m eg: feat(user): add the user login \033[m"
	exit 1
fi

批处理命令

献上代码:

rem autoSetHooks.bat
@echo off
set "curDir=%cd%"
set "curDir=%curDir:setting=%"
set source=%cd%\commit-msg.sample
set dest=%curDir%.git\hooks\commit-msg
copy "%source%" "%dest%"

虽然只有短短几行代码,但却费了我不少时间。唯一的功能也很简单,主要就是copy命令,将同路径下的commit-msg.sample拷贝到.git\hooks\路径下。

如果你看懂了批处理链接中关于环境变量延迟扩展,那么上述代码就是一个简单的Hello World~

如果你没看也无妨,关键的几句代码我会说明一下:

  1. set "curDir=%cd%" 打开终端执行cd命令,屏幕输出和这里的%cd%是一致的,这句话的意思就是获取当前批处理程序的的路径保存到curDir变量中。
  2. 比较重要的一个操作就是:(冒号),在这里可以将:A=B理解为replace(A,B),就是用B替换A。注:替换为空的话等号=后边就和第4行一样就行
  3. 确定source文件和destination之后执行copy命令就行。
  4. 最后,在clone项目到本地之后,找到上述批处理运行即可在.git/hooks/目录下生成commit-msg.sample文件。

感觉我的做法不是很标准,应该是在程序编译期间自动执行bat命令最好,这样就不用去特意运行一下批处理命令。

git提交规范说明

posted @ 2021-03-16 18:41  StimuMing  阅读(121)  评论(0编辑  收藏  举报