我正在使用php-cs-fixer,并决定尝试将该命令放入pre-commit钩子中。#!/bin/sh
echo "php-cs-fixer pre commit hook start"
SRC="src/Controller/Api/FlowsController.php"
exec tools/php-cs-fixer/vendor/bin/php-cs-fixer fix $SRC
echo "php-cs-fixer pre commit hook finish"因此,php-cs-fixer命令工作正常,但修改后不会执行。当钩子完成时,我也看不到最后的echo语句。我看到的是:
toma.tomov@MBP-TOMA myproject % git commit -m "test"
php-cs-fixer pre commit hook start
Loaded config default from "/Users/toma.tomov/Desktop/projects/myproject/.php-cs-fixer.dist.php".
Using cache file ".php-cs-fixer.cache".
Paths from configuration file have been overridden by paths provided as command arguments.
1) src/Controller/Api/FlowsController.php
Fixed all files in 2.028 seconds, 26.000 MB memory used
[PHP-CS-FIXER 9550f90a22] test
1 file changed, 2 insertions(+)发布于 2022-09-10 18:33:07
一般情况下,预提交钩子不应该试图更改将要提交的内容。取决于您如何调用Git,它们可能无法更改将要提交的内容。因此,预提交钩子只应验证您计划提交的内容是否正确(根据您希望执行的任何正确性规则)。
上面的规则有一些例外,但在违反这些规则之前,您必须对Git的内部操作有很多了解。如果您想在提交之前重新格式化或以其他方式修复文件,那么您应该作为一个单独的步骤来完成此操作。
提示:根本不要运行git commit。运行您自己的程序,它运行文件修复步骤,然后运行git add,然后运行git commit。您可以保留检查钩子(它验证要提交的内容看起来正确,然后允许或拒绝提交),而且由于文件修复步骤在git add步骤之前已经运行,所以一切都应该通过。
https://stackoverflow.com/questions/73672925
复制相似问题