Смотрите сами: вот проект, вот история коммитов.   Список контрибьюторов с главной страницы репозитория:  Ссылки на аватарках ведут на странички профилей реальных людей. Всё на месте. Кроме плашечки "Verified" как здесь:  Знатоки Git и GPG, не торопитесь проматывать ленту: эта статья не про необходимость подписывать свои коммиты. Она про неявные допущения, которые мы делаем, пользуясь "интуитивно-понятными" монстрами GitHub и GitLab и доверяя им контроль доступа к нашим репозиториям. UPD 14.07.2021: на GitHub появилась фича Vigilant Mode, которая размещает плашку "Unverified" возле всех коммитов с моей почтой, которые не подписаны, либо подписаны неизвестным GitHub ключом. Выглядит вот так:   Работает ли верно во всех возможных случаях, я не проверял. Но факт движения бесплатной версии в эту сторону меня очень радует. Напоминаю, что если ты встретил ошибку/опечатку/неточность, которая не влияет на смысл статьи, а лишь на внешний облик: В комментариях этому не место. Однако об ошибках и неточностях, влияющих на смысл статьи стоит писать в комментариях — чтобы сообщить читателям, которые прочитали статью до авторских исправлений (которые могут пройти незаметно).  Напоминаю, что ошибки автора и комментарии к ним — отличный повод начать дискуссию и учиться друг у друга, а не холиварить. UPD: Чтобы еще раз подчеркнуть этот момент, цитирую себя же из комментариев: Далее в статье я буду говорить о GitHub, однако изначально эту проблему я обнаружил на нашем внутреннем GitLab, а для этой статьи повторил то же самое на GitHub. Так что выводы применимы к обоим сервисам (и, возможно, не только к ним). Один из проектов в нашей компании прямо сейчас мигрирует из SVN в Git, и за последнюю неделю я несколько раз (и от разных людей) слышал один и тот же вопрос: "Зачем подписывать коммиты, если GitHub и так предоставляет контроль доступа?" Короткий ответ: GitHub проверяет, что в репозиторий коммитят только определенные люди, но он не проверяет, что конкретно лежит в ваших коммитах. Однако подобное доверие может сыграть с нами злую шутку. Например, репозиторий на GitHub с участием известных людей может стать еще одним звеном в цепи фишинговой кампании, толкающей жертву к потере средств. Дополнительная проблема в том, что обезопасить себя (как жертву) от таких уловок очень сложно без вмешательства GitHub.  Многие из нас, когда впервые коммитили в Git-репозиторий, сталкивались со следующим сообщением: Несмотря на то, что все уже поняли, в чем дело, я продолжу. Git для коммита требует два поля: моё имя и почту. При этом, писать туда можно всё, что угодно: Git не проводит верификацию почты, это поле появилось по историческим причинам и нужно для связи с разработчиком. GitHub, в свою очередь, во время пуша удостоверяется, что у пользователя есть право пушить в этот репозиторий и в эту ветку. Причина здесь проста: GitHub реализует свои функции поверх такого же гита, которым пользуемся и мы с тобой на своем десктопе.  В этом и заключается тонкий момент. Принимая от пользователя коммиты, GitHub читает поле email и если такой пользователь зарегистрирован на сайте, он считается контрибьютором репозитория. Для гита ведь вполне естественной является ситуация, когда я пишу код, коммичу, собираю свои коммиты в патч и посылаю другому пользователю. А он их проверит и запушит в основной репозиторий. … подписывать коммиты!" — воскликнет внимательный читатель.  К сожалению, нет.  Прямо сейчас я сходил в гугл и поискал статьи по теме. Вот одна из них: Spoofing Git Commits. Автор описывает тот же механизм (если я путано объяснил, можно почитать там) и приходит к выводу, что единственный способ защиты — подписывать свои коммиты. Но это неверно.  В общем, лучше объясню словами: Когда обычный пользователь приходит в репозиторий и видит плашечки "Unverified", он насторожится.  Насторожится ли он, зайдя в репозиторий и не найдя там ни одной плашечки? Не думаю. Судя по всему, активность пользователя (которая показывается на страничке его профиля) заполняется в базу во время пушей/работы с интерфейсом в браузере, а не парсится на лету из всех репозиториев на сайте.  Поэтому мои фейковые коммиты не отображаются на страничке активности. Как пример — страничка Линуса:  Подписывая коммит, я доказываю репозиторию и окружающим, что человек, выполнивший git commit — это я, и никто другой.  Не подписывая коммит, я никому ничего не доказываю.  Когда ты видишь мой неподписанный коммит, у тебя не возникает причин думать, что этот код закоммичен не мной. Поэтому компульсивное подписывание каждого своего коммита не защищает меня от ситуации, когда кто-то другой пишет в коммитах мою почту и уверяет инвесторов, что я пишу код в его проект. Ничто, кроме отсутствия аккаунта на GitHub. Или факта, что я — неуловимый Джо. В любом случае, я знаю по именам шестерых людей, с которыми подобная ситуация уже произошла: их имена и почтовые адреса вписали в репозиторий на GitHub, чтобы завлечь читателей под кат. Вообще-то на GitHub есть потенциальная возможность защитить себя: в настройках профиля можно включить опцию Keep my email address private. Подробности в их доках. Скриншот оттуда:  Чтобы почувствовать относительную безопасность, нужно: Зачем первый пункт? Специально для этого в список контрибьюторов на КДПВ я включил boomburum. Как можно удостовериться на странице его профиля на GitHub, он не засветил свою почту ни в одном коммите. Я эту почту просто угадал.  Ты на работе пишешь в ваш внутренний GitLab, но на сервере нет хуков, которые отвергали бы любые пуши с коммитами, которые не были бы подписаны заранее известными ключами?  Будь готов к тому, что однажды к тебе придут и спросят, зачем ты вставил в процессинг платежей бекдор, через который утекла пара миллионов. <шутка>Если только собираешься вставить такой бекдор — ты знаешь, что делать.</шутка> Не делай так, ведь админы твоего репозитория наверняка хранят все логи и записи аудита из GitLab за последние несколько лет. Напишу пару слов о том, как я создал этот репозиторий с прекрасным стихотворением Даниила Хармса. Всё, что я опишу ниже лежит в репозитории на GitHub: здесь. Пишем скрипт UPD: Скрипт обновил после комментария capslocky (использую git -c user.name=$name вместо git config ...;
UPD: Пофиксил read LINE, который немного ломался, когда встречал обратные слеши.  Инженер-Программист