Есть ли простой способ сделать так, чтобы Git всегда подписывал каждый созданный коммит или тэг?
Я попробовал это с чем-то вроде:
псевдоним commit = commit -S
Но это не помогло.
Я не хочу устанавливать другую программу, чтобы это произошло. Это выполнимо с легкостью?
Просто дополнительный вопрос, может быть, коммиты не должны подписываться, только теги, которые я никогда не создаю, так как я отправляю отдельные коммиты для проекта, такого как Homebrew и т. Д.
git
public-key-encryption
gnupg
MindTooth
источник
источник
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD
(я не имею в виду, что вы должны использовать это).Ответы:
Примечание: если вы не хотите добавлять
-S
все время, чтобы убедиться, что ваши коммиты подписаны, есть предложение (ветвь 'pu
' на данный момент, декабрь 2013 года, поэтому нет гарантии, что он попадет в релиз git), чтобы добавить Конфиг, который позаботится об этой опции для вас.Обновление май 2014: выпущено в Git 2.0 (после повторной отправки в этой серии патчей )
См совершать 2af2ef3 на Николя Vigier (boklm) :
Добавьте
commit.gpgsign
опцию, чтобы подписать все коммитыЭта конфигурация обычно устанавливается для репо (вам не нужно подписывать свои частные экспериментальные локальные репо):
Вы бы объединили это с
user.signingKey
использованием в качестве глобального параметра (уникальный ключ, используемый для всех репо, где вы хотите подписать коммит)user.signingKey
был представлен в git 1.5.0 (январь 2007 г.) с коммитом d67778e :Это обеспечивается коммитом aba9119 (git 1.5.3.2), чтобы отследить случай, когда пользователь неверно настроил
user.signingKey
свои данные.git/config
или просто не имеет никаких секретных ключей в своей связке ключей.Ноты:
signingKey
не такsigningkey
, хотяgit config
ключи не чувствительны к регистру. Это важно лишь , если вы делаетеgit config --get-regexp
, что это чувствительно к регистру, в противном случае, это только читаемость конвенции;git push --signed
не удалось учестьuser.signingKey
значение config;user.signingKey
для принудительного подписания аннотированных тегов и коммитов : commit 61c2fe0 .источник
Замените 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 на свой идентификатор ключа. Помните: никогда не стоит использовать короткий идентификатор .
UPDATE: Пер новый мерзавец эдикта , все ключи конфигурации должны быть в верблюжьем.
источник
~/.gnupg/gpg-agent.conf
и добавитьpinentry-program /usr/bin/pinentry-gtk-2
(следуя этому руководству wiki.archlinux.org/ index.php / GnuPG # pinentry )Edit: На Git версии 1.7.9, то это можно подписать Git совершающее (
git commit -S
). Обновление ответа немного, чтобы отразить это.Название вопроса:
Краткий ответ: да, но не делай этого.
Обращаясь к опечатке в вопросе:
git commit -s
не подписывает коммит. Скорее соman git-commit
страницы:Это дает вывод журнала, подобный следующему:
Обратите внимание на бит «Подписано: ...»; это было сгенерировано
-s
флагом наgit-commit
.Цитируя электронное сообщение о релизе :
Так что да, вы можете подписывать коммиты. Тем не менее, я лично призываю к осторожности с этой опцией; автоматическое подписание коммитов практически бессмысленно, см. ниже:
Это правильно. Комитеты не подписаны; теги есть. Причину этого можно найти в этом сообщении Линуса Торвальдса , последний абзац которого гласит:
Я бы посоветовал просмотреть связанное сообщение, в котором разъясняется, почему автоматическое подписание коммитов не является хорошей идеей гораздо лучше, чем я мог бы.
Однако , если вы хотите автоматически подписать тег , вы сможете сделать это,
git-tag -[s|u]
заключив его в псевдоним; если вы собираетесь это сделать, вы, вероятно, захотите установить свой идентификатор ключа~/.gitconfig
или.git/config
файл проекта . Больше информации об этом процессе можно увидеть в книге сообщества git . Подписание тегов бесконечно более полезно, чем подписание каждого коммита, который вы делаете.источник
git blame
кому угодно.Чтобы автоматическая подпись работала до версии git 2.0, вам нужно добавить псевдоним git для commit.
источник
Вы должны четко указать, что если вы подписываете коммит или тег, это не означает, что вы одобряете всю историю. В случае коммитов вы только подписываете изменения под рукой, а в случае тега, ну ... вам нужно определить, что вы имеете в виду. Возможно, вы извлекли изменение, которое утверждает, что оно от вас, но не было (потому что кто-то другой выдвинул его на ваш пульт). Или это изменение, в котором вы не хотите участвовать, но вы только что подписали тег.
В типичных проектах OSS это может быть не так часто, но в корпоративном сценарии, когда вы только касаетесь кода время от времени и не читаете всю историю, он может остаться незамеченным.
Подписание коммитов является проблемой, если они будут перебазированы или подобраны другим родителям. Но было бы хорошо, если бы измененный коммит мог указывать на «оригинальный» коммит, который фактически проверяет.
источник
commit.gpgsign
значение true, как предложено @VonC