Git预提交钩子:更改/添加的文件

我正在编写一个预提交的钩子。我想php -l对所有带有.php扩展名的文件运行。但是我被困住了。

我需要获取暂存的新文件/已更改文件的列表。删除的文件应排除在外。

我已经尝试过使用git diffgit ls-files,但是我认为我需要帮助。


撒科打诨
浏览 888回答 3
3回答

BIG阳

获得相同列表的更简洁的方法是:git diff --cached --name-only --diff-filter=ACM这将返回需要检查的文件列表。但是仅php -l在工作副本上运行可能不是正确的选择。如果您正在执行部分提交,即仅选择当前工作集与HEAD的差异的子集作为提交,则测试将在您的工作集上运行,但将证明您的从未存在过的提交磁盘。要正确执行此操作,应将整个暂存的图像提取到临时区域,然后在此处进行测试。rm -rf $TEMPDIRmkdir -p $TEMPDIRgit checkout-index --prefix=$TEMPDIR/ -afgit diff --cached --name-only --diff-filter=ACM | xargs -n 1 -I '{}' \bin\echo TEMPDIR/'{}' | grep \\.php | xargs -n 1 php -l有关其他实现,请参见为Git构建更好的预提交挂钩。

ibeautiful

这是我用于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        fidone对于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        fidone
打开App,查看更多内容
随时随地看视频慕课网APP