Вопрос состоит из двух частей: автоматическое форматирование кода и обнаружение его несоответствия вашим стандартам кодирования.
Автоматическое форматирование код на самом деле не то, что вы хотите поместить между вами и вашим репо напрямую. Изменение файлов или попытка изменить файлы в хуке pre-commit
может привести к путанице. Таким образом, не имеет значения, какой VCS вы используете.
Было бы целесообразно использовать инструмент для форматирования кода с помощью вашего редактора или в качестве процесса, который вы запускаете (вручную или полуавтоматически) в рамках вашего рабочего процесса разработки. Например, vim имеет функцию =
для автоматической вставки кода, и, как уже упоминалось другими, Устройство Pear * beautifier является одной из возможностей сделать это.
Обнаружение стандартных отклонений кода требуется инструмент cli, который сообщает, когда файл не соответствует стандартам кодирования - очевидный выбор - PHP Code Sniffer (phpcs) - хотя это может просто используйте тот же инструмент, который вы используете, чтобы украсить свой код вручную (если вы его используете) и убедитесь, что он не меняет содержимое файла.
Вам может потребоваться написать собственный стандарт для использования с phpcs, если ни один из существующих стандартов не соответствует вашему стилю.
Вы можете использовать ловушку предварительной фиксации для запуска проверки кода непосредственно перед его фиксацией. Если обнаружены ошибки кода, вы получите уведомление о них, и фиксация будет прервана. Вы можете обойти свои ловушки перед фиксацией, используя git commit --no-verify
Этот репо может оказаться полезным: https://github.com/AD7six/git-hooks
* 1 028 * Пример:
$ more foo.php
<?php
function bar() {
}
$ git add foo.php
$ git commit -v
running php/lint.php ... OK
running php/phpcs.php ... FAIL
phpcs -n -s --extensions=php,ctp --encoding=UTF-8 --standard=Cake '/tmp/cakephp-git-hooks'
FILE: foo.php
---------------------------------------
FOUND 3 ERROR(S) AFFECTING 2 LINE(S)
---------------------------------------
2 | ERROR | Space indented: Tabs for indents, spaces for alignment (Cake.WhiteSpace.ForceTabIndent)
2 | ERROR | Line indented incorrectly; expected 0 spaces, found 4 (Cake.WhiteSpace.ScopeIndent.Incorrect)
3 | ERROR | Space indented: Tabs for indents, spaces for alignment (Cake.WhiteSpace.ForceTabIndent)
---------------------------------------
Time: 0 seconds, Memory: 3.75Mb
$
(фиксация прервана, код не соответствует стандартам кода)
$ git commit -v --no-verify -m "dummy commit"
running misc/happy-commits ... OK
[2.1 2c432f1] dummy commit
1 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 foo.php
$
(фиксация выполнена успешно - хотя стандарты кода не были соблюдены)