Вопрос Как мне подписать git коммиты с помощью IDE, такой как IntelliJ в Windows?
Если вам интересно, прочитайте то, что я пробовал здесь:
Я следовал в основном за гидом Github. Я позаботился о том, чтобы не забыть перезапустить bash/IntelliJ после того, как вы изменили конфигурационные файлы.
- Создать новую пару ключей GPG
- Добавьте ключ GPG в мою учетную запись GitHub
-
.gitconfigпроверенное (от 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 не может зафиксировать изменения при попытке подписать коммит (GPG), и добавилno-ttyв мойC:\Users\username\.gnupg\gpg.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/info/624343/keep-gnupg-credentials-cached-for-entire-user-session -
Теперь позвольте мне запустить этот gpg-agent, https://superuser.com/info/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 в мои Program Files (x86), что, как мне кажется, должно быть. С помощью
where gpgя узнал, что он по крайней мере не указывает на gpg, который я только что скачал, потому что тот показал второе. Поэтому я указал git на нужныйgit config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'с помощьюgit config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe' -
Теперь у меня есть ошибка
gpg: skipped "keyid": secret key not available. Решение в gpg: пропущено "N": секретный ключ недоступен, это то, что я только что сделал, так что это не поможет. Тогда я понял, что все настроил с другим gpg, а не с этим. Я сделалalias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'", проверилgpg --versionи сделал все заново. На самом деле, я добавил строку псевдонима в свой.bash_profileпоэтому мне не нужно запускать его каждый раз. -
Когда я пытаюсь
gpg --gen-keyон зависает немедленно. Понятия не имею, почему, я не думаю, что проблема заключается в недостаточной энтропии, потому что старый gpg работал нормально, но возможно, что более новая версия требует большей энтропии. В любом случае я не смог найти ни одного пользователя Windows с такой же проблемой в Интернете. -
Оно работает! Когда я фиксирую в IntelliJ, он запрашивает мою парольную фразу с пинентри только один раз. Но теперь я не могу сделать коммит из Git Bash с ошибкой
no secret keyкоторая имеет смысл, потому что, как я сказал,gpg --list-keysпуст: ни один ключ не связан с этим gpg. -
Подписание Intellij IDEA GIT фиксирует с GPG, имеет отношение, но единственный ответ для MAC и, кажется, не относится к Windows. Это привело меня к:
-
me.m01.eu намекает на добавление новой переменной окружения
GNUPGHOMEкоторая указывает наC:\Users\username\.gnupg. Этот каталог существует, но, как уже упоминалось в ответе на запрос git commit, произошел сбой: секретный ключ недоступен. Я думаю, что мой новый gpg используетC:\Users\username\AppData\Roaming\gnupgпоэтому я добавил его. Я проверил с помощьюprintenv GNUPGHOMEчто я добавил его правильно (мне пришлось перезагрузить компьютер). Ничего не изменилось, хотя. -
Поскольку мои ключи, я думаю, в
C:\Users\username\.gnupgя попытался указать туда переменную окружения, но это не помогло,gpg --list-keysвсе еще был пуст. Поэтому мне пришлось искать другой способ указать gpg, где находятся мои ключи. -
gpg --list-keys --homedir='C: /Users/s156757/.gnupg'дал правильные ключи, поэтому я решил добавитьhomedir C:\Users\s156757\.gnupgв мойC:\Users\username\AppData\Roaming\gnupg\gpg.confФайлC:\Users\username\AppData\Roaming\gnupg\gpg.confкоторый мне пришлось создать. Из-за этой ошибки. Я подтвердил, чтоgpg --list-keysвернул мои ключи. Все та же ошибка, добавлениеno-ttyиuse-agentк этому файлу conf не помогло.
Теперь я могу
skipped "keyid": No secret keyиз IntelliJ, но не с помощью Git Bash, что приводит кskipped "keyid": No secret key.
Больше мыслей
- Мне не удалось экспортировать ключи из gpg в gpg2 с помощью
gpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --importgpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import - Я думал, что только Gpg4win можно настроить, поэтому мне не нужно каждый раз вводить пароль. К сожалению, я нигде не смог найти способ заставить Gpg4win запомнить мою фразу-пароль.
- Позже я подумал, что если я правильно помню,
gpg --list-secret-keysникогда не возвращал ничего для gpg 2. Я только позже узнал, что эта команда отличается отgpg --list-keys.
Короче говоря, это главная проблема: gpg-agent разрешает кэширование парольной фразы, но gpg-версия git не соответствует версии gpg-agent, поэтому сначала вам нужно установить правильный gpg 2. Но мне не удалось выполнить эту установку таким образом, чтобы я мог выполнять коммиты как из Git Bash, так и из IntelliJ.