Как подписать git-коммиты из среды IDE, такой как IntelliJ?
вопрос как подписать git-коммиты с помощью IDE, такой как IntelliJ в Windows?
Если вам интересно, прочитайте, что я пробовал здесь:
я следовал в основном руководство Github. Я не забыл перезапустить bash / IntelliJ после того, как вы изменили файлы конфигурации.
- создать новую пару ключей GPG
- добавьте ключ GPG в мой GitHub счет
-
связать проверенное (ПО GitHub) письмо с моим ключом GPG где я убедился, что письмо в мой
.gitconfig
то же самое. - расскажите Git о моем ключе GPG
- подпишите фиксацию с помощью GPG и подтвердил, что он был проверен на Github.
- С этой же страницы я устанавливаю фиксации, которые должны быть подписаны по умолчанию с
git config --global commit.gpgsign true
(Я использую git 2.12). Я сделал новое обязательство и проверил, что оно было подписаноgit verify-commit HEAD
когда я пытаюсь совершить в IntelliJ, я получаю
gpg: cannot open tty 'no tty'
Я нашел IntelliJ не удается зафиксировать изменения при попытке подписать commit (GPG) и добавилno-tty
мойC:Usersusername.gnupggpg.conf
файл и перезапущен.тогда я получаю ошибку
gpg: Sorry, no terminal at all requested - can't get input
что кажется разумным, потому что я только что добавил опцию, которая имеет какое-то отношение к терминалу. Как gpg: извините, терминал вообще не запрашивается-не удается получить вход говорит решение состоит в том, чтобы удалитьno-tty
который, я надеюсь, не относится к моему делу.другие ответы в первом вопросе предлагается добавить
use-agent
а также вgpg.conf
файл, который приводит к дополнительной ошибкеgpg: gpg-agent is not available in this session
. Ах, подождите, может быть, мне нужно настроить gpg-agent.лучшим руководством для Windows, которое я мог найти, было Archlinux wiki (да, справа). Он указывает добавить в
C:/Users/username/.gnupg/gpg-agent.conf
"время жить", поэтому я создаю, что файл и добавитьdefault-cache-ttl 34560000
иmax-cache-ttl 34560000
согласно https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-sessionтеперь давайте фактически начнем этот GPG-агент, https://superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running заставил меня проверить, что действительно
gpg-agent --version
было намного новее, чемgpg --version
, поэтому я хотел бы иметь gpg2, чтобы я мог работатьgit config --global gpg.program gpg2
.но у меня нет gpg2, доступного в командной строке. Я установил программе Gpg4win (двоичные версии, внизу) и даже Gnupg 2 отдельно, но это не дало мне gpg2 в командной строке, я заметил, что мне нужно было поместить GNU в мои программные файлы (x86), которые, я думаю, я должен был иметь. С
where gpg
я узнал, что он, по крайней мере, не указывает на gpg, который я только что загрузил, потому что он показал второй. Поэтому я указал git на правый сgit config --global gpg.program 'C:Program Files (x86)GnuPGbingpg.exe'
теперь у меня есть ошибка
gpg: skipped "keyid": secret key not available
. Решение в gpg: пропущено "N": секретный ключ недоступен это то, что я только что сделал, так что это не помогает. Затем я понял, что я установил все с другим gpg, а не с этим. Я сделалalias gpg="'C:Program Files (x86)GnuPGbingpg.exe'"
, зарегистрированногоgpg --version
и сделал все это снова. На самом деле я поместил строку псевдонима в свой.bash_profile
так мне не нужно запускать его каждый раз.когда я пытаюсь
gpg --gen-key
он висит немедленно. Не знаю почему, я не думаю, что проблема в недостаточной энтропии, потому что старая gpg работала нормально, но возможно, что более новая версия требует большей энтропии. В любом случае я не мог найти пользователя windows с той же проблемой в Интернете.это работает! Когда я совершаю в IntelliJ, он запрашивает мою парольную фразу с pinentry только один раз. Но теперь я не могу совершить от Git Bash, с
no secret key
ошибки, которая имеет смысл, потому что как я сказалgpg --list-keys
пусто: ни один ключ не связан с этой gpg.Intellij идея подписания git совершает с GPG имеет значение, но единственный ответ для MAC и, похоже, не относится к Windows. Это привело меня к:
меня.m01.ЕС намеки на добавление новой переменной среды под названием
GNUPGHOME
, который указывает наC:Usersusername.gnupg
. Этот каталог существует, но, как указано в ответе от ошибка подписи git commit: секретный ключ не доступно я думаю, что мой новый gpg используетC:UsersusernameAppDataRoaminggnupg
поэтому я добавил Это вместо этого. Я связался сprintenv GNUPGHOME
что я добавил его правильно (пришлось перезагрузиться). Но это ничего не изменило.так как мои ключи я думаю в
C:Usersusername.gnupg
я попытался указать переменную среды туда, но это не помогло,gpg --list-keys
было все еще пусто. Поэтому мне пришлось найти другой способ указать gpg, где находятся мои ключи.gpg --list-keys --homedir='C:/Users/s156757/.gnupg'
дал правильные ключи, поэтому я решил добавитьhomedir C:Userss156757.gnupg
мойC:UsersusernameAppDataRoaminggnupggpg.conf
файл, который я должен был создать. Из-за эта ошибка. Я подтвердилgpg --list-keys
вернул ключи. Все та же ошибка, добавляяno-tty
иuse-agent
этому файлу conf не помогло.
теперь я могу совершать из IntelliJ, но больше не с Git Bash, что приводит к
skipped "keyid": No secret key
.
2 ответов
IDEA не является терминалом и не может обрабатывать подписание в данный момент. См.https://youtrack.jetbrains.com/issue/IDEA-127802.
существует обходной путь, хотя, проверьтеhttps://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498
для справки, вот полные инструкции, или, скорее, шаги, которые я сделал, чтобы сделать его несколько работать. С "работой" я имею в виду, что коммиты подписываются автоматически, но есть два недостатка:
- GitHub распознает их как
unverified
:The key whose key-id is in the signature did not sign this commit. Someone may be trying to trick you.
Последующий вопрос относительно этого ключ, чей ключ-id находится в подписи, не подписывал эту фиксацию - создание фиксации занимает гораздо больше времени, например, пять секунд вместо меньше одного.
если вы застряли, проверьте шаги в вопросе, чтобы узнать, была ли у меня такая же проблема.
- первые несколько шагов от добра руководство Github: создать новую пару ключей GPG
- добавьте ключ GPG в свою учетную запись GitHub
-
связать проверенное (ПО GitHub) письмо с ключом GPG и убедитесь, что имя и адрес электронной почты в ваш
.gitconfig
- это тот же. - расскажите Git о своем ключе GPG
- подпишите фиксацию с помощью GPG и подтвердите, что он проверен на Github, вы должны увидеть маленький значок при просмотре фиксации.
установить фиксации, которые будут подписаны по умолчанию с
git config --global commit.gpgsign true
. Сделайте новую фиксацию и убедитесь, что она подписана сgit verify-commit HEAD
.версия gpg, которая поставляется с git, слишком старая, поэтому установите программе Gpg4win (двоичное релизы, внизу), который должен установить gpg 2. С
where gpg
вы должны увидеть два пути, из которых, вероятно, второй ваш новый gpg, что-то вродеC:\Program Files (x86)\GnuPG\bin\gpg.exe
. Если нет, попробуйте установить Gnupg 2 отдельно от страницы загрузки.Я поставил
alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
указатьgpg
команда на мой новый gpg в моемC:\Users\username\.bash_profile
, перезапустите Git Bash и проверьте с помощьюgpg --version
что я теперь использую gpg 2.добавить новую переменную окружения
GNUPGHOME
что указывает наC:\Users\username\.gnupg
. Перезагрузитесь и проверьте с помощьюprintenv GNUPGHOME
что вы добавили его правильно.-
сделать скрипт
C:\Users\username\gpg-no-tty.sh
и положить в негоecho passphrase | gpg --passphrase-fd 0 --batch --no-tty --yes "$@"
почему вы ставите свой пароль в открытом виде вот так
--batch
опция, которая заставляет все это работать, нуждается в парольной фразе. Мне кажется, что должно существовать лучшее решение не сохранять пароль в открытом виде на вашем компьютере, поэтому, пожалуйста, оставьте комментарий, если вы нашли нечто лучшее. укажите git на этот скрипт с помощью
git config --global gpg.program C:\Users\username\gpg-no-tty.sh
.теперь проверьте как в Git Bash, так и в IntelliJ, что вы можете зафиксировать, и убедитесь, что это сработало, выполнив
git verify-commit HEAD
.