Теперь протестируйте в Git Bash и IntelliJ то, что вы можете зафиксировать, и убедитесь, что это работает, выполнив
с Как мне подписать git коммиты, используя IDE, например IntelliJ в Windows?
Если вам интересно, прочитайте то, что я пробовал здесь:
Я следовал в основномРуководство Github, Я позаботился о том, чтобы не забыть перезапустить bash / IntelliJ после того, как вы изменили конфигурационные файлы.
Создать новую пару ключей GPGДобавьте ключ GPG в мою учетную запись GitHubСвяжите подтвержденное (от GitHub) письмо с моим ключом GPG где я убедился, что электронная почта в моем.gitconfig
та же.Расскажите Git о моем ключе GPGПодписать коммит с GPG и подтвердил, что это было Verfied на 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 вики (да правильно). Указывает добавить в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 в мои Program Files (x86), что, я думаю, мне следовало бы иметь. С участиемwhere gpg
Я обнаружил, что это, по крайней мере, не указывает на только что скачанный gpg, потому что тот показал второе. Так что я указал на мерзавца с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
файл, который мне пришлось создать. Потому чтоэта ошибка, Я подтвердилgpg --list-keys
вернул мои ключи. Все та же ошибка, добавляяno-tty
а такжеuse-agent
чтобы этот файл не помог.
Теперь я могу делать коммиты из IntelliJ, но не с помощью Git Bash, что приводит кskipped "keyid": No secret key
.
Больше мыслей
Мне не удалось экспортировать ключи из gpg в gpg2 с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.