Я только начал использовать git и установил git и gpg через homebrew. По какой-то причине я получаю эту ошибку, когда git commit
смотрю на так много других вопросов о stackoverflow по этой теме, и ни один из них не помог мне. Как мне исправить эту ошибку, чтобы я мог успешно загрузить.
error: gpg failed to sign the data
fatal: failed to write commit object
git config --local user.signingkey
правильный ключ, и он снова будет автоматически подписан. и, возможно, отключит глобальную с помощьюgit config --global --unset user.signingkey
Ответы:
Для устранения неполадок сначала попробуйте две вещи:
git config --global gpg.program gpg2
, чтобы убедиться, что git использует,gpg2
а неgpg
echo "test" | gpg2 --clearsign
, чтобы убедиться, чтоgpg2
сам работаетЕсли все в порядке, можно попробовать следующее:
brew install pinentry
чтобы убедиться, что у вас установлен хороший инструмент для ввода парольной фразыЕсли после этой установки вы повторите попытку
git commit
и все равно получитеfailed to sign the data
ошибку " ":gpgconf --kill gpg-agent
чтобы убить любого работающего агента, который может зависнутьЕсли это говорит о том, что
gpgconf
он не установлен или не имеет--kill
опции, вы можете попробовать следующее: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
источник
gpg2 --gen-key
, это то, что вам нужно сделать в первую очередь.export GPG_TTY=$(tty)
. Что касается использования git без gpg, вы должны иметь возможность сделать это по умолчанию или просто запустивgit config --global commit.gpgsign false
глобальную отмену подписи gpg для ваших коммитов.echo "test" | gpg2 --clearsign
, обнаружил ошибку, и это привело меня к этой теме , которая решила мою проблему: я просто поместилexport GPG_TTY=$(tty)
в свой˜/.bash_profile
файл, а затем перезагрузилsource ˜/.bash_profile
Git необходимо знать, с каким ключом он подписывается.
После настройки GPG, gpg-agent и файлов gpg.conf (см. Это руководство ) вам необходимо запустить
Очевидно, замените открытый ключ в конце своим собственным. Если вы хотите, чтобы каждая фиксация была подписана по умолчанию, используйте
источник
Каким-то образом ваш git настроен на то, чтобы GPG подписывал каждую фиксацию. Для фиксации или отправки с помощью git не требуется подписывать GPG. Вероятно, это вызывает ошибку, потому что ваш механизм подписи gpg еще не настроен.
Если вы новичок в git, попробуйте сначала заставить его работать без подписи GPG, а затем добавьте подписку позже, если она вам действительно нужна.
Вы можете проверить, как ваш git настроен относительно gpg, выполнив:
Что может дать ноль или более строк, в том числе:
Если "commit.gpgsign" - истина, значит, у вас включена подпись gpg. Отключите его:
Затем попробуйте снова запустить коммит. Теперь он должен работать без подписи gpg. После того, как вы получите базовую работу git, попробуйте снова добавить подпись gpg в микс.
источник
git config --global --unset commit.gpgsign
у меня сработало :)Обратитесь к решениям @sideshowbarker и @Xavier Ho, я решил свою проблему, выполнив следующие действия.
Предположим, что gpg2 установлен brew,
Напомнил мой коллега, нужно добавить
в ~ / .zshrc при использовании zsh, иначе добавить в ~ / .bash_profile
Для macOS:
gpg2 объединяется с gpg в brew, и поэтому команда gpg указывает на gpg2
и есть pinentry-mac для ввода парольной фразы
Добавить строку
Напомнил мой коллега, нужно добавить
в ~ / .zshrc при использовании zsh, иначе добавить в ~ / .bash_profile
источник
Я им пользуюсь. Он поддерживает zsha и работает в подсистеме Windows для Linux:
источник
Убедитесь, что срок действия вашего ключа истек. Как только вы установите дату истечения срока действия (нет необходимости создавать новый ключ, если вы этого не хотите), он
git
будет работать как обычно.Один из способов исправить просроченный ключ:
(Примечание:
$
представляет приглашение командной строки, вводите команды после приглашения; нажимайте Enter после каждой команды)$ gpg2 --list-keys
найти соответствующий идентификатор ключа (символы после\
вpub
строке)$ gpg2 --edit-key <key id>
- это открывает оболочку gpg с изменением подсказки наgpg>
gpg> expire
- следуйте инструкциям, чтобы установить новую дату истечения срока действия первичного ключаЗатем, если есть подключи, срок действия которых истек (
sub
отображается в строке), также сбросьте их даты истечения срока действия:gpg> key 1
- выбирает первый подключgpg> expire
- следуйте инструкциям, чтобы установить новую дату истечения срока действия для подключейПри необходимости повторите для каждого последующего подраздела.
источник
save
в командной строке gpg, когда закончите!Это сработало для меня на ubuntu 18.04
Проверьте свой ключ gpg
если вы получите пустой ответ, сгенерируйте ключ GPG
повторно запустите первую команду, вы должны получить результат как:
установить git пение ключ
тогда вам хорошо идти! (--global необязательно)
В качестве альтернативы, если вы не против подписаться с помощью ключа ssh
обратите внимание, что это не рекомендуется из-за проблемы безопасности в соответствии с этим вопросом здесь и здесь
источник
Пришлось исправить gpg.program на абсолютный путь к gpg:
Я использую Windows с cygwin.
источник
choco install gpg4win
Решение:
cat <<'EOF' >> ~/.gnupg/gpg.conf use-agent pinentry-mode loopback EOF
cat <<'EOF' >> ~/.gnupg/gpg-agent.conf allow-loopback-pinentry EOF
Источник
источник
Эта ошибка также может возникнуть, когда срок действия вашего ключа GPG истек. Создание нового ключа и добавление его в Git должно решить эту проблему.
источник
У меня возникла эта проблема после обновления до gnupg 2.x. Было бы видно, что gpg2 ссылается на ключи по-другому: у меня все еще была
signingkey = ABC98F11
(настройка gpg v1) в моем~/.gitconfig
. Ключевые идентификаторы для gpg2 длиннее. Посмотрите их сgpg --list-secret-keys
источник
Если у вас раньше были настроены pinentry и gpg, и они перестали работать из ниоткуда:
Проверьте, работает ли ваш gpg:
echo "test" | gpg --clearsign
Если он говорит
gpg: signing failed: No pinentry
, просто перезапустите клиент демона gpg, который время от времени зависает:gpgconf --kill gpg-agent
Теперь должно работать:
echo "test" | gpg --clearsign
источник
Я сделал
git
ключ с 3 отдельными ключами дляcertify
/sign
/,encrypt
и в будущем срок действия ключа был истек (после работы в течение нескольких дней):сделал новый ключ без добавления отдельных подключей для решения проблемы.
источник
Для меня эта ошибка начала возникать
git tag -s
в Debian GNU / Linux, когда я переключился сpinentry-gnome3
на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)
может быть основным исправлением и единственная вещь необходимая в некоторых случаях.источник
update-alternatives --config pinentry
сделал это для меня. Я подключился по SSH к моему рабочему столу иpinentry
был установлен на/usr/bin/pinentry-gnome3
(который должен иметь резервный TTY при подключении по SSH или при переключении на виртуальную консоль). Но, видимо, это не сработало. Установка значения по умолчанию/usr/bin/pinentry-tty
на меня сделала свое дело. Возможно, мне придется вернуть его, когда я вернусь к своему рабочему столу, но пока я в порядке.export GPG_TTY=$(tty)
было недостаточно. Я сделал это, но мне нужно было переключиться,pinentry
прежде чем я смог подписать свой коммит.Для меня это решило то, что имя ключа соответствовало моему имени пользователя git. Я предполагаю, что электронные письма тоже должны совпадать. Возможно, это связано с тем, что я использую GPG KeyChain на моем Mac. Не уверена.
Я думал, что называю ключ, когда заполнял это, но я предполагаю, что он запрашивал мое имя (имя пользователя git).
источник
У меня была эта ошибка на macos - чтобы попытаться устранить неполадки, я попытался перечислить ключи, чтобы узнать, истек ли срок их использования
gpg2 --list-keys
- я подтвердил, что срок действия ключей не истек и что правильный ключ был установлен в моей конфигурации с использованиемgit config --global user.signingkey
.После того, как я выполнил эти команды, я внезапно снова смог без проблем выполнять подписанные коммиты. Я не менял свои файлы конфигурации или ключи - я даже не создавал новый экземпляр терминала. Просто казалось, что gpg2 был в каком-то странном состоянии на моем Mac.
источник
Возможно, ваша конфигурация Git была установлена gpgsign = true . Попробуйте установить для него значение false, если вы не хотите назначать свои коммиты. Перейдите в папку вашего репозитория и измените файл
Из этого...
К этому...
источник
Я решил проблему с установкой, а
brew install gpg2
затем сделалgit config --global gpg.program gpg2
источник
Такая же ошибка может быть вызвана истекшим сроком действия ключа в конфигурации git.
Пожалуйста, проверьте содержимое
cat .git/config
и найдитеsigningkey
значение и проверьте, не истек ли срок его действия. Если да, обновите его на новый.источник
Если вы используете смарт-карту / yubikey для хранения своего ключа GPG и устанавливаете
signkey
конфигурацию git с помощью ключа, хранящегося на карте (и все приведенные выше ответы, похоже, не решают вашу проблему), ваш заблокированный PIN-код карты может быть основная причина этой проблемы.Чтобы проверить заблокированный PIN-код:
Если счетчик похож на
Затем ваш PIN-код блокируется (после 3-х неудачных попыток).
Чтобы разблокировать PIN-код:
источник
Для меня простой
brew unintstall gnupg && brew cask reinstall gpg-suite
решает вопрос.Он удаляет (в моем случае) вручную установленный самодельным gpg и переустанавливает весь GPG Suite.
источник
В моем случае у меня была смешанная конфигурация gpg и конфигурация smimesign, указанная в документации для подписи коммита здесь: https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing- ключ
После нескольких часов работы я обнаружил, что лучший способ исправить это - отключить все, что связано с gpg, и перенастроить gpg.
Как упоминалось в ответе @Jason Thrasher, найдите всю конфигурацию git, связанную с gpg, используя:
Затем отключите все как локально, так и локально, используя:
Затем измените конфигурацию, следуя официальной документации, приведенной выше. Надеюсь это поможет.
источник
В моем случае эта ошибка возникла при запуске
git commit
в маленькомtmux
окне, которое не соответствовало подсказке парольной фразы.источник
В моем случае мне пришлось сопоставить имя, хранящееся в настройках GitHub, с именем и комментарием ключа.
Так что, если ваше имя
gpg --list-keys
возвращаетсяuid [ultimate] Joe Blogs (fancy comment) <email@example.com>
в .gitconfig, должно бытьJoe Blogs (fancy comment)
.Изначально мое имя было установлено как,
Joe Blogs
и GPG не мог найти мой ключ и показать ошибку «нет секретного ключа» вstrace
. К сожалению, эта ошибка не появилась без нее,strace
и можно было бы получить общийисточник
У меня была эта проблема только сейчас, когда обновился VSCode. Я подумал, что агент GPG зависает, так как выполнение команды заняло несколько секунд, прежде чем произошла ошибка. Запуск
gpgconf --kill gpg-agent
сбросил это и исправил это для меня.источник
Это поможет вам избавиться от него
git config commit.gpgsign false
источник