Ответ 1
На вопрос две части: автоматическое форматирование кода и обнаружение, когда оно не соответствует вашим стандартам кодирования.
Автоматическое форматирование код не является тем, что вы хотите установить между вами и вашим репо напрямую. Модификация файлов или попытка изменения файлов в тэге pre-commit
может привести к беспорядку. Таким образом, неважно, какие vcs вы используете.
Использование инструмента для форматирования кода через ваш редактор или как процесс, который вы запускаете (вручную или полуавтоматизированно) как часть вашего рабочего процесса разработки, будет уместным. Например, vim имеет функцию =
для кода с автоматическим отступом, и, как упоминалось другими Pear beautifier, это одна из возможностей сделать это.
Определение стандартных правил кода требует, чтобы инструмент cli сообщал вам, когда файл не соответствует стандартам кодирования - очевидный выбор PHP Code Sniffer (phpcs) - хотя это может быть просто тот же инструмент, который вы используете, чтобы украсить свой код вручную (если вы его используете) и убедиться, что он не меняет содержимое файла.
Возможно, вам понадобится написать свой собственный стандарт для использования с phpcs, если ни один из существующих стандартов не соответствует вашему стилю.
Вы можете использовать pre-commit hook, чтобы инициировать проверку кода прямо перед его фиксацией - если обнаружены ошибки кода, вы будете уведомлены о них, и коммит будет прерван. Вы можете обойти свои крючки с предварительной фиксацией, используя git commit --no-verify
Вы можете найти это репо полезным: https://github.com/AD7six/git-hooks
Пример:
$ 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
$
(фиксация выполнена успешно, даже если стандарты кода не были выполнены)