Ошибка Git - gpg не удалось подписать данные
Я только начал использовать git и устанавливаю git и gpg через homebrew.
По какой-то причине я получаю эту ошибку, когда я делаю git commit
Я просмотрел так много других вопросов stackoverflow по этой теме, и ни один из них не работал для меня.
Как я могу исправить эту ошибку, чтобы я мог успешно загрузить.
error: gpg failed to sign the data
fatal: failed to write commit object
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не установлен или не имеет , вы может попробуйте это:
cp ~/.gnupg ~/.gnupg-GOODсохранить копию вашего~/.gnupgчтобы вернуться к более поздней версии, если это необходимо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 gpg2brew 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чтобы найти соответствующий идентификатор ключа (символы после\onpubстрока)
$ gpg2 --edit-key <key id>- это открывает оболочку gpg с подсказкой, измененной наgpg>
gpg> expireследуйте инструкциям, чтобы установить новую дату окончания срока действия для первичного ключадалее, если есть подразделы, срок действия которых истек (
subпоказывает на линии), сбросить их сроки годности, тоже:
gpg> key 1- выбор первого подразделаgpg> expireследуйте инструкциям, чтобы установить новую дату окончания срока действия для разделаповторите для каждого последующего раздела, по мере необходимости.
для меня эта ошибка начала возникать с
git tag -sна Debian GNU / Linux, когда я переключился сpinentry-gnome3topinentry-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 должно решить эту проблему.
Comments