Подтвердить что ты не робот

Автоматическое форматирование кода git

Я работаю над проектом (PHP), и на каждом коммите есть некоторые перерывы в условном коде. Я использую git для управления версиями. Есть ли способ автоматического форматирования кода, чтобы весь код оставался чистым?

4b9b3361

Ответ 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
$

(фиксация выполнена успешно, даже если стандарты кода не были выполнены)

Ответ 2

Git знает крючки. Вы могли бы использовать их, чтобы иметь какое-то приложение для проверки чеков, прежде чем каждая фиксация будет принята в репозиторий. Проверьте файлы в .git/hooks/ в вашем репозитории. Таким образом, можно отказаться от фиксации. Я не уверен, что вы можете изменить фиксацию, хотя.

Ответ 3

Существует несколько скриптов PHP beautifier (один из них в PEAR), которые вы могли бы вызвать из git commit hook.

Ответ 4

Вы можете использовать PHP_Beautifier, чтобы украсить ваш PHP скрипт.

Но я думаю, что украшение в каждой фиксации может закончиться множеством модифицированной строки. Это затруднит понимание вывода команды diff.

Ответ 5

Git имеет фиксации, которые позволяют выполнять команду перед вашей фиксацией. Не рекомендуется использовать эти фиксаторы фиксации для изменения исходного кода, так как это может вызвать нежелательные результаты.

Однако вы можете использовать крюк pre-commit git для выполнения сниффера PHP Code. PHP-сниффер кода - это инструмент, устанавливаемый через PEAR, который укажет, где вы задумались о стандарте. Вы можете настроить свои собственные стандарты или использовать существующие стандарты, такие как стандарт PEAR. Крюк фиксации может быть настроен для отображения всех нарушений (нестандартного кода) и остановки фиксации. Если код соответствует стандартам, он может разрешить фиксацию.

Вот ссылка на сниффер PHP Code:

http://pear.php.net/package/PHP_CodeSniffer/redirected

Вот хороший пример git pre-commit hook для сниффера PHP-кода:

https://gist.github.com/1892861

Некоторая документация git commit hooks:

http://book.git-scm.com/5_git_hooks.html