Как правильно проверить данные коммитов в Git?

13

Моя цель - проверить данные коммита, которые не соответствуют определенным требованиям, а затем отклонить либо созданный коммит, либо отправленный в удаленный репозиторий.

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

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

У кого-нибудь есть понимание этой проблемы? И если да, не могли бы вы предоставить или указать мне пример скрипта-ловушки обновления? Я немного смущен тем, как это работает.

dalanmiller
источник
4
Это отличный первый вопрос.
Дейнит

Ответы:

7

Вы должны сначала выяснить, хотите ли вы, чтобы неквалифицированный код был зафиксирован или был передан / опубликован обратно в апстрим.

на мой взгляд, более поздний вариант более осуществим.

с DVCS, как мерзавец. Вы действительно не хотите контролировать, как каждый разработчик использует свой локальный репозиторий. и ты не можешь контролировать это.

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

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

Я полагаю, что эта автоматическая проверка не заменяет контроль качества, который обычно достигается с помощью анализа кода или парного программирования.

если вы знакомы с github , вы заметите, что «запрос на получение ответа» - это еще один подход к этой проблеме. многие проекты и компании с открытым исходным кодом используют пул-запрос github для контроля разрешений в филиалах и проверки кода. но для этого нужно взаимодействие с человеком, поэтому, возможно, это не то, что вы просите.

Хуан Тао
источник
1

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

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

Это объясняется в Pro Git , глава 7.3. Настройка Git - Git Hooks .

sleske
источник
Спасибо за ваш ответ, и мне очень нравится новый сайт Git. Моя единственная проблема заключается в том, что трудно начать писать собственные хуки коммитов, особенно потому, что вы не знаете, где именно вы находитесь в процессе и что вы должны проверять. Если я пытаюсь написать ловушку предварительного получения, я предполагаю, что у пульта есть ветвь отслеживания того, что я нажимаю? Откуда я знаю? Хотелось бы, чтобы была какая-то особенность git, которая позволила бы вам моделировать то, что у вас есть в данный момент времени.
dalanmiller