Ошибка Git - gpg не удалось подписать данные



Я только начал использовать git и устанавливаю git и gpg через homebrew.
По какой-то причине я получаю эту ошибку, когда я делаю git commit
Я просмотрел так много других вопросов stackoverflow по этой теме, и ни один из них не работал для меня.
Как я могу исправить эту ошибку, чтобы я мог успешно загрузить.



error: gpg failed to sign the data
fatal: failed to write commit object
1339   12  

12 ответов:

для устранения неполадок, две вещи, чтобы сначала попробовать:

  • выполнить git config --global gpg.program gpg2, чтобы убедиться, что Git использует gpg2, а не gpg
  • выполнить echo "test" | gpg2 --clearsign, чтобы убедиться, что работает

если это все выглядит хорошо, то следующая вещь, чтобы попробовать:

  • выполнить brew install pinentry чтобы убедиться, что у вас есть хороший инструмент, установленный для ввода парольной фразы

если после этого установить и повторите попытку git commit и все-таки получить "failed to sign the data" ошибка:

  • выполнить gpgconf --kill gpg-agent убить любого работающего агента, который может быть повешен

если это говорит gpgconf не установлен или не имеет , вы может попробуйте это:

  1. cp ~/.gnupg ~/.gnupg-GOOD сохранить копию вашего ~/.gnupg чтобы вернуться к более поздней версии, если это необходимо
  2. brew install gnupg21 для установки GnuPG 2.1

причина сохранения копии вашего ~/.gnupg реж заключается в том, что с GnuPG 2.1 потенциально создает / изменяет некоторые ключевые данные таким образом, что они не обратно совместимы с GnuPG 2.0 и более ранними версиями, поэтому если вы хотите вернуться позже, вы можете сделать mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg.


в противном случае есть несколько основных шагов для запуска, чтобы проверить, что у вас есть рабочая среда GnuPG:

  • выполнить gpg2 -K --keyid-format SHORT, чтобы проверить, что у вас есть хотя бы одна пара ключей

если вывод этого показывает, что у вас нет секретного ключа для использования GnuPG, то вы нужно создать один:

  • выполнить gpg2 --gen-key, чтобы GnuPG провел вас через шаги для создания пары ключей

если вы получаете сообщение об ошибке, говорящее "неуместный ioctl для устройства" сделайте так:

  • выполнить export GPG_TTY=$(tty) и / или добавьте это к вашему ~/.bashrc или ˜/.bash_profile

Git должен знать, какой ключ он подписывает.

после установки GPG, gpg-agent и вашего gpg.conf файлов (см. данное руководство), вам нужно запустить

git config --global user.signingkey EB11C755

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

git config --global commit.gpgsign true

каким-то образом ваш git настроен на подписание GPG каждого коммита. Подписание с GPG не требуется для фиксации или нажатия с помощью git. Вероятно, это дает ошибку, потому что ваш механизм подписи gpg еще не настроен.

Если вы новичок в git, попробуйте сначала заставить его работать без подписи GPG, а затем добавить вход позже, если вам это действительно нужно.

вы можете проверить, как ваш git настроен в отношении gpg, выполнив:

git config -l | grep gpg

что может привести к ноль или более строк, в том числе:

commit.gpgsign=true

Если " commit.gpgsign " - это правда, тогда у вас включена подпись gpg. Отключите его с помощью:

git config --global --unset commit.gpgsign

затем попробуйте снова запустить фиксацию. Теперь он должен работать без подписи gpg. После того, как вы получите базовую работу git, вы должны попробовать добавить GPG signing обратно в микс.

обратитесь к @sideshowbarker и @ Xavier ho solution, я решил свою проблему с помощью следующих шагов.

предположим, что gpg2 установлен brew,

git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key

gpg2 -K --keyid-format SHORT 

.../.gnupg / pubring.gpg

sec rsa2048/0A61C6FC 2017-06-29 [SC] [истекает: 2019-06-29]

git config --global user.signingkey 0A61C6FC

напомнил мой коллега, нужно добавлять

export GPG_TTY=$(tty)

to~/.zshrc при использовании zsh, else добавить к ~/.файл


для macOS,

gpg2 объединяется с gpg в brew и, следовательно, команда gpg указывает на gpg2

brew install gpg2

brew info gpg

gnupg: стабильный 2.2.6 (в бутылках)

git config --global gpg.program gpg
gpg -K --keyid-format SHORT 

и там есть pinentry-mac для ввода парольной фразы

brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf

добавить строку

pinentry-program / usr / local / bin / pinentry-mac

может быть ваш git config был gpgsign = true. Попробуйте установить его в false, если вы не хотите, чтобы asign ваши коммиты. Перейдите в папку репозитория и измените файл

нано .git / config

от этого...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = [email protected]:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

для этого...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = [email protected]:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false

я испытал эту проблему после обновления до gnupg 2.x. было бы видно, что gpg2 ссылается на ключи по-разному: у меня все еще было signingkey = ABC98F11 (настройка gpg v1) в моем ~/.gitconfig. Ключевые идентификаторы для gpg2 длиннее. Посмотрите их с gpg --list-secret-keys

проверьте, не истек ли срок действия вашего ключа. После того, как вы исправите дату истечения срока действия (нет необходимости создавать новый ключ, если вы не хотите),git будет работать в обычном режиме.

один из способов исправить истекший ключ:

(Примечание: $ представляет строку командной строки, введите команды после строки; нажмите Enter после каждой команды)

$ gpg2 --list-keys чтобы найти соответствующий идентификатор ключа (символы после \ on pub строка)

$ gpg2 --edit-key <key id> - это открывает оболочку gpg с подсказкой, измененной на gpg>

gpg> expire следуйте инструкциям, чтобы установить новую дату окончания срока действия для первичного ключа

далее, если есть подразделы, срок действия которых истек (sub показывает на линии), сбросить их сроки годности, тоже:

gpg> key 1 - выбор первого подраздела gpg> expire следуйте инструкциям, чтобы установить новую дату окончания срока действия для раздела

повторите для каждого последующего раздела, по мере необходимости.

для меня эта ошибка начала возникать с git tag -s на Debian GNU / Linux, когда я переключился с pinentry-gnome3 to pinentry-curses (через update-alternatives --config pinentry) для легкого удаленного доступа. Это произошло только с git tag -s, а не gpg (например,gpg --clearsign) сам по себе.

единственное изменение, необходимое, чтобы заставить его работать снова в этом случае было добавить export GPG_TTY=$(tty) мои файлы запуска оболочки.

я, хотя и не получил сообщение об ошибке "несоответствующий ioctl для устройства", упомянутое в качестве индикатора для этого исправления в еще один ответ на этот вопрос.

Примечание: так как причина для получения этой ошибки была совершенно другой, чем для тех, кто предложил export GPG_TTY=$(tty) прежде чем (обычно в качестве побочного намека) в других ответах на этот вопрос, я решил, что этот вопрос нуждается в другом ответе, в котором упоминается, что export GPG_TTY=$(tty) может быть главным исправлением и единственной вещью, необходимой в некоторых случаях.

Я сделал git ключ с 3 отдельными ключами для certify/sign/encrypt & ключ показал, как истек в будущем (после работает нормально в течение нескольких дней):

pub   rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
      Key fingerprint = 4670 59C1 7592 08B8 7FA5  313B 2A42 B6A6 4CD1 E9DA
uid         [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub   rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub   rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub   rsa2048/A3913A3C 2017-04-28 [] [expired: never     ]

сделал новый ключ без добавления отдельных подразделов для решения проблемы.

эта ошибка также может возникнуть, когда истек срок действия ключа GPG. Создание нового ключа и добавление его в Git должно решить эту проблему.

Я решил проблему установкой brew install gpg2 затем делаю git config --global gpg.program gpg2

Это поможет вам избавиться от него

git config commit.gpgsign false

Comments

    Ничего не найдено.