Как подписать git-коммиты из среды IDE, такой как IntelliJ?

вопрос как подписать git-коммиты с помощью IDE, такой как IntelliJ в Windows?

Если вам интересно, прочитайте, что я пробовал здесь:

я следовал в основном руководство Github. Я не забыл перезапустить bash / IntelliJ после того, как вы изменили файлы конфигурации.

  1. создать новую пару ключей GPG
  2. добавьте ключ GPG в мой GitHub счет
  3. связать проверенное (ПО GitHub) письмо с моим ключом GPG где я убедился, что письмо в мой .gitconfig то же самое.
  4. расскажите Git о моем ключе GPG
  5. подпишите фиксацию с помощью GPG и подтвердил, что он был проверен на Github.
  6. С этой же страницы я устанавливаю фиксации, которые должны быть подписаны по умолчанию с git config --global commit.gpgsign true (Я использую git 2.12). Я сделал новое обязательство и проверил, что оно было подписано git verify-commit HEAD
  7. когда я пытаюсь совершить в IntelliJ, я получаю gpg: cannot open tty 'no tty' Я нашел IntelliJ не удается зафиксировать изменения при попытке подписать commit (GPG) и добавил no-tty мой C:Usersusername.gnupggpg.conf файл и перезапущен.

  8. тогда я получаю ошибку gpg: Sorry, no terminal at all requested - can't get input что кажется разумным, потому что я только что добавил опцию, которая имеет какое-то отношение к терминалу. Как gpg: извините, терминал вообще не запрашивается-не удается получить вход говорит решение состоит в том, чтобы удалить no-tty который, я надеюсь, не относится к моему делу.

  9. другие ответы в первом вопросе предлагается добавить use-agent а также в gpg.conf файл, который приводит к дополнительной ошибке gpg: gpg-agent is not available in this session. Ах, подождите, может быть, мне нужно настроить gpg-agent.

  10. лучшим руководством для 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

  11. теперь давайте фактически начнем этот 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.

  12. но у меня нет gpg2, доступного в командной строке. Я установил программе Gpg4win (двоичные версии, внизу) и даже Gnupg 2 отдельно, но это не дало мне gpg2 в командной строке, я заметил, что мне нужно было поместить GNU в мои программные файлы (x86), которые, я думаю, я должен был иметь. С where gpg я узнал, что он, по крайней мере, не указывает на gpg, который я только что загрузил, потому что он показал второй. Поэтому я указал git на правый с git config --global gpg.program 'C:Program Files (x86)GnuPGbingpg.exe'

  13. теперь у меня есть ошибка gpg: skipped "keyid": secret key not available. Решение в gpg: пропущено "N": секретный ключ недоступен это то, что я только что сделал, так что это не помогает. Затем я понял, что я установил все с другим gpg, а не с этим. Я сделал alias gpg="'C:Program Files (x86)GnuPGbingpg.exe'", зарегистрированного gpg --version и сделал все это снова. На самом деле я поместил строку псевдонима в свой .bash_profile так мне не нужно запускать его каждый раз.

  14. когда я пытаюсь gpg --gen-key он висит немедленно. Не знаю почему, я не думаю, что проблема в недостаточной энтропии, потому что старая gpg работала нормально, но возможно, что более новая версия требует большей энтропии. В любом случае я не мог найти пользователя windows с той же проблемой в Интернете.

  15. это работает! Когда я совершаю в IntelliJ, он запрашивает мою парольную фразу с pinentry только один раз. Но теперь я не могу совершить от Git Bash, с no secret key ошибки, которая имеет смысл, потому что как я сказал gpg --list-keys пусто: ни один ключ не связан с этой gpg.

  16. Intellij идея подписания git совершает с GPG имеет значение, но единственный ответ для MAC и, похоже, не относится к Windows. Это привело меня к:

  17. меня.m01.ЕС намеки на добавление новой переменной среды под названием GNUPGHOME, который указывает на C:Usersusername.gnupg. Этот каталог существует, но, как указано в ответе от ошибка подписи git commit: секретный ключ не доступно я думаю, что мой новый gpg использует C:UsersusernameAppDataRoaminggnupg поэтому я добавил Это вместо этого. Я связался с printenv GNUPGHOME что я добавил его правильно (пришлось перезагрузиться). Но это ничего не изменило.

  18. так как мои ключи я думаю в C:Usersusername.gnupg я попытался указать переменную среды туда, но это не помогло,gpg --list-keys было все еще пусто. Поэтому мне пришлось найти другой способ указать gpg, где находятся мои ключи.

  19. 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


для справки, вот полные инструкции, или, скорее, шаги, которые я сделал, чтобы сделать его несколько работать. С "работой" я имею в виду, что коммиты подписываются автоматически, но есть два недостатка:

если вы застряли, проверьте шаги в вопросе, чтобы узнать, была ли у меня такая же проблема.

  1. первые несколько шагов от добра руководство Github: создать новую пару ключей GPG
  2. добавьте ключ GPG в свою учетную запись GitHub
  3. связать проверенное (ПО GitHub) письмо с ключом GPG и убедитесь, что имя и адрес электронной почты в ваш .gitconfig - это тот же.
  4. расскажите Git о своем ключе GPG
  5. подпишите фиксацию с помощью GPG и подтвердите, что он проверен на Github, вы должны увидеть маленький значок при просмотре фиксации.
  6. установить фиксации, которые будут подписаны по умолчанию с git config --global commit.gpgsign true. Сделайте новую фиксацию и убедитесь, что она подписана с git verify-commit HEAD.

  7. версия gpg, которая поставляется с git, слишком старая, поэтому установите программе Gpg4win (двоичное релизы, внизу), который должен установить gpg 2. С where gpg вы должны увидеть два пути, из которых, вероятно, второй ваш новый gpg, что-то вроде C:\Program Files (x86)\GnuPG\bin\gpg.exe. Если нет, попробуйте установить Gnupg 2 отдельно от страницы загрузки.

  8. Я поставил alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'" указать gpg команда на мой новый gpg в моем C:\Users\username\.bash_profile, перезапустите Git Bash и проверьте с помощью gpg --version что я теперь использую gpg 2.

  9. добавить новую переменную окружения GNUPGHOME что указывает на C:\Users\username\.gnupg. Перезагрузитесь и проверьте с помощью printenv GNUPGHOME что вы добавили его правильно.

  10. сделать скрипт C:\Users\username\gpg-no-tty.sh и положить в него echo passphrase | gpg --passphrase-fd 0 --batch --no-tty --yes "$@"

    почему вы ставите свой пароль в открытом виде вот так --batch опция, которая заставляет все это работать, нуждается в парольной фразе. Мне кажется, что должно существовать лучшее решение не сохранять пароль в открытом виде на вашем компьютере, поэтому, пожалуйста, оставьте комментарий, если вы нашли нечто лучшее.

  11. укажите git на этот скрипт с помощью git config --global gpg.program C:\Users\username\gpg-no-tty.sh.

  12. теперь проверьте как в Git Bash, так и в IntelliJ, что вы можете зафиксировать, и убедитесь, что это сработало, выполнив git verify-commit HEAD.