Вопрос Как мне подписать 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 --import
gpg --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.