Условный хук предварительной фиксации, управляемый из командной строки для GIT: возможно ли это? - PullRequest
6 голосов
/ 16 марта 2012

У нас есть хороший хук предварительной фиксации для GIT, а также хорошая фиксация-msg. Хук pre-commit выполняет проверку синтаксиса, а commit-msg выполняет некоторую другую бизнес-логику. Все хорошо работает.

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

Можно ли перехватить / интерпретировать любой параметр командной строки, который был задан во время коммита git на уровне ловушки перед фиксацией, чтобы пропустить стандартную проверку кодирования в ловушке перед фиксацией (необязательно?)

Или это возможно только в ловушке сообщения перед фиксацией, анализируя сообщение фиксации для конкретной подстроки?

Пожалуйста, поделитесь своими лучшими практиками о том, как (и где) создавать управляемый из командной строки условный код с использованием перехватчика git pre-commit (или других перехватчиков git).

Ответы [ 2 ]

11 голосов
/ 16 марта 2012

Простой способ сделать это - просто использовать переменную окружения:

STANDARDS=no git commit

и затем в скрипте (например, в Bash, но вы можете читать env vars на любом языке, на котором работает ваш хук):

if [ "$STANDARDS" != "no" ]; then
    ...check for code standards...
fi

Git обычно не передает информацию за пределы того, что указано в man githooks, в каждую ловушку, поэтому попытка сделать это с помощью «опции командной строки», такой как git commit --no-standards, или что-то подобное не будет работать.

4 голосов
/ 16 марта 2012

Чтобы добавить к тому, что сказал @Amber, вы должны уметь:

STANDARDS=no git commit -m "committing"

и иметь соответствующий хук предварительной фиксации, который будет видеть переменную среды и принимать решения.Конечно, есть --no-verify, но я полагаю, вы не хотите пропускать весь предварительный коммит:

-n
--no-verify

Эта опция обходит хуки pre-commit и commit-msg.Смотрите также githooks (5).

...