3 回答
TA贡献1859条经验 获得超6个赞
获得相同列表的更简洁的方法是:
git diff --cached --name-only --diff-filter=ACM
这将返回需要检查的文件列表。
但是仅php -l在工作副本上运行可能不是正确的选择。如果您正在执行部分提交,即仅选择当前工作集与HEAD的差异的子集作为提交,则测试将在您的工作集上运行,但将证明您的从未存在过的提交磁盘。
要正确执行此操作,应将整个暂存的图像提取到临时区域,然后在此处进行测试。
rm -rf $TEMPDIR
mkdir -p $TEMPDIR
git checkout-index --prefix=$TEMPDIR/ -af
git diff --cached --name-only --diff-filter=ACM | xargs -n 1 -I '{}' \bin\echo TEMPDIR/'{}' | grep \\.php | xargs -n 1 php -l
有关其他实现,请参见为Git构建更好的预提交挂钩。
TA贡献1993条经验 获得超5个赞
这是我用于Perl检查的内容:
git diff --cached --name-status | while read st file; do
# skip deleted files
if [ "$st" == 'D' ]; then continue; fi
# do a check only on the perl files
if [[ "$file" =~ "(.pm|.pl)$" ]] && ! perl -c "$file"; then
echo "Perl syntax check failed for file: $file"
exit 1
fi
done
对于PHP,它将如下所示:
git diff --cached --name-status | while read st file; do
# skip deleted files
if [ "$st" == 'D' ]; then continue; fi
# do a check only on the php files
if [[ "$file" =~ ".php$" ]] && ! php -l "$file"; then
echo "PHP syntax check failed for file: $file"
exit 1
fi
done
- 3 回答
- 0 关注
- 954 浏览
添加回答
举报