Используя git, как автоматически форматировать при извлечении / клонировании / извлечении из github

Итак, наша команда нова, и мы работаем над определением руководства по стилю для нашего кода. Мы магазин GoLang, поэтому форматирование очень просто.

Код сценария оболочки (среди многих) не содержит единого канонического руководства по стилю.

Мы будем использовать shfmt (потому что это выглядит прилично) в хуке фиксации, который, по крайней мере, сделает наш код однородным в репо. Но как насчет того, чтобы "изогнуть" код обратно из однородного стиля, shfmt к нашим индивидуальным стилям? Существует ли что-то подобное?

Я думаю, я мог бы просто использовать shfmt или один из 10 с лишним инструментов, которые "украшают" шелл-код и настраивают этот инструмент на самые близкие настройки, чтобы вернуть мой стиль. Это вероятное направление, в котором мне нужно идти.

Два вопроса:

  1. Кто-нибудь знает инструмент, который может идти вперед или назад в форматировании?
  2. А как насчет крюка авто-клонирования / извлечения / извлечения или способа, которым это будет сделано автоматически?

Очевидно, я могу написать скрипт-обертку, который я выполняю после вытягивания, но мне просто интересно, делал ли кто-нибудь что-то подобное раньше.

1 ответ

Решение

Это не будет практическим подходом ("вперед или назад в форматировании"), потому что он включает в себя переписывание коммитов (изменение их содержимого, следовательно, их SHA1)

Обычный подход заключается в простом отказе от любой принудительной фиксации, если ее вывод shfmt отличается от выдаваемого содержимого фиксации (это означает, что код не был должным образом отформатирован перед отправкой).

Тем не менее, если вы хотите убедиться, что предыдущие коммиты отформатированы, вы должны использовать git filter-branch, как описано в " Переформатировании вашей кодовой базы с помощью git filter-branch " Эллиотом Шансом.

git filter-branch --tree-filter 'shfmt $(\
  git show $GIT_COMMIT --name-status | egrep ^[AM] |\
    grep .sh| cut -f2)' -- --all

Тем не менее, все разработчики должны будут сбросить его / ее локальный клон к новому переписанному репо.

Я просто ищу способ показать свой стиль в своем локальном репо.

Проблема заключается в том, чтобы отображать ваш стиль , не меняя содержание.
Вы можете попробовать подходить к чистому фильтру содержимого, как здесь.

Другие вопросы по тегам