soldatov
@soldatov
Разработчик PHP

PhpStorm не может подписать git commit. Почему?

Коммиты подписываются gpg. При попытке сделать коммит (или мерж-коммит, как на скрине) с помощью gui в PhpStorm выходит ошибка:
615eca24412a3842896693.png


gpg failed to sign the data
failed to write commit object


В логах PhpStorm:

2021-10-07 12:32:35,737 [8688771] INFO - 4idea.branch.GitMergeOperation - starting
2021-10-07 12:32:35,737 [8688771] INFO - 4idea.branch.GitMergeOperation - next repository: \\wsl$\Ubuntu-20.04\home\user\projects\*********скрыл**********
2021-10-07 12:32:35,797 [8688831] INFO - #git4idea.commands.GitHandler - [*********скрыл**********] git -c core.quotepath=false -c log.showSignature=false merge master
2021-10-07 12:32:35,837 [8688871] INFO - #git4idea.commands.GitHandler - error: gpg failed to sign the data
2021-10-07 12:32:35,837 [8688871] INFO - #git4idea.commands.GitHandler - fatal: failed to write commit object
2021-10-07 12:32:35,857 [8688891] INFO - 4idea.branch.GitMergeOperation - Unknown error. {128}


Предполагаю, это из-за того, что PhpStorm не может отобразить форму для ввода пароля.

При этом, если буду комитить через консоль PhpStorm, отлично работает:
615ecb4e7f468947602839.png

Так же, если в консоли ввести пароль, например:
echo "test" | gpg --clearsign
615ecee53c6c6467868262.png
Откроется сессиия, и в PhpStrom можно будет какое-то время пользоваться gui git. Пока не закроется сессия, чтобы нужно было ввести заново пароль.

Еще замечание, что такая ошибка возникает для проектов, которые расположены внутри файловой системы WSL. Если проект будет на хостовой Windows, подпись работает штатно.

Конфигурация git:
615ecbc6ea658430057955.png

Windows 10 pro.
PHPStorm 2021.2.2
615ec928c149e757958929.png
615ec95d33a6c015313138.png

> wsl --list --verbose
Ubuntu-20.04 Running 2

Почему возникает какая ошибка? Как починить?
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
soldatov
@soldatov Автор вопроса
Разработчик PHP
Разобрался со своей проблемой. Чтоб была возможность подписать коммит запароленым gpg ключом, нужно указать путь для pinentry программы (программа для ввода пароля gpg).

1. Установить gpg на хостовую windows. Качаем тут https://gnupg.org/ установщик Gpg4win. По факту из всего установленного gpg нам понадобится один файл.
2. В wsl подсистеме, в домашнем каталоге ложны быть файлы со следующим содержимым:
user@pc:~$ cat .gnupg/gpg.conf
no-tty
use-agent
user@pc:~$ cat .gnupg/gpg-agent.conf
pinentry-program "/mnt/c/Program Files (x86)/GnuPG/bin/pinentry-basic.exe"


После этого будем появляться окно для ввода пароля:
6163efa770d09415040271.png

Напомню, что файлы проекта, git, gpg, docker, и другие рабочие инструменты находятся внутри wsl. PhpStorm установлен на windows. Gui idea с таким сценарием хорошо стравляется, кроме вот этой мелкой проблемы.

Возможно idea в будущем доработают, и будет встроенное окно ввода пароля, возможно что-то я делаю не правильно, но пока приходится gpg ставить в двух местах. И на wsl машину и на хостовую винду.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
просто сделай по инструкции
https://docs.github.com/en/authentication/managing... (у меня все получилось, windows 10)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы