自动化部署项目hook
在研究如何更好使用git log
的过程中,学习了很多非常强有力的技能,这些技能极大地方便了我们对项目的管理,更好、更加规范、更加流程的帮助我们管理一个项目从开发到维护的过程。😛
看到一篇文章,讲了关于
git commit
的信息填写的格式进行规范。git 的 hook 操作强大到难以置信,效率为王!文章中还讲到了如何使用自动化部署对项目团队中每个人的
git commit
进行规范,闲来无事玩两下,借着这篇文章,我就开始了并不是自动化的“自动化”,简单的几句代码,却是几个小时的尝试,从sample到批处理命令的编写,都是泪啊~~~其中关于如何获取文件路径的尝试也是耗费不少时间,尝试几次之后才得以成功。
前言
首先列出期间我用到的几个网站,以便你操作的时候查阅相关的资料
- 批处理入门手册_w3cschool,w3c对于批处理的各个命令的解说挺详细的,但是排版太难看,实在是不忍下眼,但是作为手册,还是有参考的价值,“环境变量延迟扩展”一节对文件路径的修改与获取相对重要一点,可以先看一下。
- 批处理获取路径_weixin_30952103的博客-CSDN博客,这篇博客对批处理中文你的bat文件在
e:/mybat/test.bat
,则%0
就是e:/mybat/test.bat
,%~dp0
是e:/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文件都可以通过自定义的形式实现相应的功能。
这里添加一个我从不知名博客找到的一段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~
如果你没看也无妨,关键的几句代码我会说明一下:
set "curDir=%cd%"
打开终端执行cd
命令,屏幕输出和这里的%cd%
是一致的,这句话的意思就是获取当前批处理程序的的路径保存到curDir变量中。- 比较重要的一个操作就是
:
(冒号),在这里可以将:A=B
理解为replace(A,B)
,就是用B替换A。注:替换为空的话等号=
后边就和第4行一样就行 - 确定source文件和destination之后执行copy命令就行。
- 最后,在clone项目到本地之后,找到上述批处理运行即可在
.git/hooks/
目录下生成commit-msg.sample
文件。
感觉我的做法不是很标准,应该是在程序编译期间自动执行bat命令最好,这样就不用去特意运行一下批处理命令。
本文来自博客园,作者:StimuMing,转载请注明原文链接:https://www.cnblogs.com/fole-del/p/14545214.html