要执行这个操作需要掌握两个知识点
- php语法检查工具php-cs-fixer(使用方法自行百度)。
- git钩子的使用方法(如果不懂就继续百度吧)。
具体操作方式:
- 在一个git项目的根目录下进入钩子目录编辑提交之前的钩子文件
cd .git/hooks
大约能看到以下几个钩子文件,是git提供的一些例子。去掉.sample后缀名之后都可以运行。
├── applypatch-msg.sample
├── commit-msg.sample
├── post-update.sample
├── pre-applypatch.sample
├── pre-commit.sample
├── pre-push.sample
├── pre-rebase.sample
├── pre-receive.sample
├── prepare-commit-msg.sample
└── update.sample
在文件列表中,pre-commit.sample
文件就是执行 git commit命令之前的钩子文件。系统会先调用此文件,我们就在这个文件里面处理那些已经被add到暂存区的php文件。
1. 在当前目录创建一个pre-commit
文件,并将以下代码复制进去,并保存。
#!/usr/bin/env bash
while read -r file;
do
file=${file:1}
#只处理后缀名为.php的文件
if [[ $file = *.php ]];
then
#执行语法检查并将不符合php代码规范的文件执行强转
php-cs-fixer fix $file;
#重新执行git命令,将强转之后的文件重新加入到缓存区
git add $file;
fi
done < <(git diff --cached --name-status --diff-filter=ACM)
#执行完成,退出此脚本
exit 0
注意:php-cs-fixer命令需要配置好全局变量,否则的话,请写全路径,避免找不到php-cs-fixer命令而报错
然后,我们再执行git提交命令的时候,就会把php文件全部执行一遍格式转化然后再提交啦。
git commit -m 'xxxxxxxxxxx'