Вот в чем дело.Недавно в группе был построен репозиторий кода для разработки нового продукта.Кроме того,в Пекине сегодня шел сильный дождь,и многие коллеги предпочитали работать из дома(в том числе и я),поэтому я решил использовать свой персональный компьютер для работы.
Но информация Git на моем персональном компьютере использует мою личную электронную почту:
git config --global user.name "Germey"
git config --global user.email "cqc@cuiqingcai.com"
Каждый, кто использовал Git, должен был ввести эти две строки команд, верно?
Эта конфигурация действует глобально, поэтому, если я использую команду Git commit для отправки кода, имя фиксации и адрес электронной почты станут личной информацией, которую я только что настроил.
Затем, если вы запушите код в репозиторий кода компании, в нем появится странное имя пользователя и аватар, вот так:
Вышеупомянутые два коммита на картинке были отправлены мной с моего персонального компьютера, а последний коммит был отправлен мной в компании с помощью корпоративного компьютера на прошлой неделе.
Разве это не странно?
Если другие люди также используют личный почтовый ящик для отправки, то в базе балансовых единиц будут записи о всевозможных странных отправителях, и узнать об этом будет невозможно.
Это определенно невыносимо: если кто-то в будущем напишет странный код, будет сложно узнать, кто его написал.
Итак, у меня возникла идея и мысль: почему бы не сделать лимит при отправке кода?
Можно ли это сделать? Конечно!
Git Hook
Вот точка знаний - Git Hook, что означает выполнение некоторой пользовательской логики до и после выполнения различных событий Git. Например, если мы определяем Git Hook перед фиксацией, это может быть до фиксации. Чтобы выполнить некоторые операции, мы определяем Git Hook после отправки, который может выполнять некоторые операции после операции отправки.
Конкретный контент см. в официальной документации:git-triplegate.com/book/en/v2/…
Ну, тогда мне на самом деле просто нужно проверить информацию Git перед фиксацией Например, если почтовый ящик, настроенный для проверки, не является рабочим почтовым ящиком, то фиксация не разрешена, поэтому не будет никаких странных записей фиксации.
Практичный
Просто сделай это.
Есть много инструментов для настройки Git Hook, Git имеет нативную поддержку, но, конечно, мы можем использовать и сторонние библиотеки.
В настоящее время наш репозиторий кода разрабатывается на основе Node.js, поэтому самое популярное решение для конфигурации проекта Node.js Git Hook — это хаски, поэтому здесь я тоже использую хаски для этого.
Сначала установите хаски:
yarn add husky
Затем настройте команду подготовки Node.js. Эта команда может выполняться автоматически после установки пакета пакета Node.js. Поэтому команда подготовки настроена как сценарий инициализации хаски. В package.json добавлена следующая конфигурация:
{
"scripts": {
...
"prepare": "npx husky install"
},
}
Хорошо, в этом случае, если другие клонируют этот репозиторий, после установки всех пакетов Node.js конфигурация husky будет автоматически инициализирована, а затем локально в проекте будет сгенерирован каталог инициализации .husky, так что Git Hook займет эффект.
После того, как Git Hook вступит в силу, все скрипты Hook, определенные в каталоге .husky, будут применены.Например, если скрипт предварительной фиксации добавлен в каталог .husky, скрипт будет предварительно выполнен для выполнения некоторых проверок перед выполнением фиксация.
Поэтому я создал сценарий предварительной фиксации в каталоге .husky и написал следующее:
EMAIL=$(git config user.email)
if [[ ! $EMAIL =~ ^[.[:alnum:]]+@microsoft\.com$ ]];
then
echo "Your git information is not valid";
echo "Please run:"
echo ' git config --local user.name "<Your name in Microsoft>"'
echo ' git config --local user.email "<Your alias>@microsoft.com"'
exit 1;
fi;
Это сценарий оболочки Linux, который точно следует синтаксису оболочки.
Вот на самом деле получаетсяgit config user.email
Возвращайте результат, а затем используйте регулярные выражения, чтобы определить, соответствует ли он формату электронной почты компании.Например, суффикс электронной почты нашей компании, конечно же, является суффиксом microsoft.com, поэтому он используется здесь.^[.[:alnum:]]+@microsoft\.com$
соответствовать. Здесь стоит отметить, почему здесь не работает\S
для представления непробельных символов используйте[:alnum]
Шерстяная ткань? Это связано с тем, что Bash Shell изначально не поддерживает\S
Это совпадение, поэтому его нужно заменить на[:alnum]
.
А если не совпадает?
Затем просто выведите несколько подсказок об ошибках, например, используйте подсказку здесьgit config —-local
команда для настройки имени пользователя и адреса электронной почты, зачем использовать-—local
Это потому, что я не хочу, чтобы эта конфигурация влияла на глобальную конфигурацию Git, поэтому эта конфигурация действует только для этого репозитория, а затемexit 1
Это вызывает ненормальный выход, и программа завершается, поэтому команда фиксации не будет запущена.
С этой конфигурацией попробуем эффект.
На этот раз я не вносил никаких изменений, и Git по-прежнему является исходной конфигурацией, то есть моей глобальной конфигурацией личного почтового ящика.
В это время, когда я выполняю команду фиксации, появляется сообщение об ошибке:
Your git information is not valid
Please run:
git config --local user.name "<Your name in Microsoft>"
git config --local user.email "<alias>@microsoft.com"
отличный! обнаружено.
Как было сказано в подсказке, я выполнил следующую команду настройки:
git config --global user.name "Qingcai Cui"
git config --global user.email "xxxx@microsoft.com"
Здесь я настроил личную информацию своей компании и адрес электронной почты компании.
Затем снова выполните команду фиксации, и вышеуказанное сообщение об ошибке больше не будет появляться! зафиксировать удалось!
Готово! ! !
С его помощью мы можем успешно предотвратить попадание некоторых странных коммитов в репозиторий кода компании!
Потом я отправил этот PR, и некоторые коллеги, казалось, были глубоко тронуты и сказали:
Ха-ха-ха, с этим мы никогда не увидим почтовый ящик QQ в нашем репозитории кода в будущем!
Надеюсь, это поможет всем~
Для более интересного контента, пожалуйста, обратите внимание на мои публичные аккаунты «Coder of Attack» и «Cui Qingcai丨Jing Mi».