3 回答

TA貢獻1780條經驗 獲得超4個贊
獲得相同列表的更簡潔的方法是:
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貢獻1810條經驗 獲得超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 關注
- 502 瀏覽
添加回答
舉報