Я следил за несколькими статьями по поводу привлекательных атрибутов Git 2.10 . Проходя через который обновил GIT до 2.10.0 и внес изменения в глобальный, в .gitconfig
результате следующим образом -
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[user]
name = xyz
email = abc.def@gmail.com
signingkey = AAAAAAA
[core]
excludesfile = /Users/xyz/.gitignore_global
editor = 'subl' --wait
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
old = red strike
new = green italic
Но теперь, когда я пытаюсь подписать свои коммиты, используя
git commit -a -S -m "message"
Я вижу следующую ошибку -
Вам нужен пароль, чтобы разблокировать секретный ключ для
пользователь: "XYZ (с цифровой подписью)"
2048-битный ключ RSA, идентификатор AAAAAAAA, создан 2016-07-01
ошибка: gpg не смог подписать данные фатально: не удалось записать объект коммита
Примечание. Я все еще могу зафиксировать изменения, используяgit commit -a -m "message"
Есть ли способ преодолеть то же самое? Или какие-либо изменения, необходимые в gpg
конфигах, чтобы ладить с обновлением git?
Обновление 1
Также ищите дополнительную полезность, следуя следующим указаниям. Есть ли способ «автоматического подписания» коммитов в Git с помощью ключа GPG? , Я уже настроил ключ, используя
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
и, очевидно, все равно получаю ту же ошибку.
источник
gpg failed to sign the data
каждый раз, когда использую-S
. В 2.8 я могу без проблем подписать коммит. Я не знаю, что случилось.user.signingkey
исправило мою проблему, как ни странно.user.name
был! = Имя, используемое при создании ключа PGPОтветы:
Я столкнулся с этой проблемой с OSX.
Оригинальный ответ:
Похоже , что обновление GPG (от самогона) изменен на местоположение ,
gpg
чтобыgpg1
, вы можете изменить двоичный файл , где Git смотрит на GPG:Если у вас нет gpg1:
brew install gpg1
.Обновленный ответ:
Похоже, что gpg1 устарела / «аккуратно вытеснена из использования» , поэтому вам, вероятно, стоит обновить gpg2, к сожалению, это включает в себя еще несколько шагов / немного времени:
Первая часть устанавливает gpg2, а последняя требуется для ее использования . Для устранения неполадок посмотрите этот ответ (хотя это касается linux, а не brew), он предлагает хороший тест:
Если этот тест пройден успешно (нет ошибок / выводов, включая подпись PGP), вы успешно обновились до последней версии gpg.
Теперь вы сможете снова использовать git-подпись!
Стоит отметить, что вам нужно иметь:
Примечание. После запуска подписанного коммита вы можете проверить, что он подписан с помощью:
который будет включать информацию gpg для последнего коммита.
источник
gnupg2
сbrew
испорченными символическимиgpg
ссылками, таким образом, было удалено, я исправил ссылки, используяbrew link --overwrite gnupg2
.gpg1
это все еще экспортируемый исполняемый файл.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
наконец исправил это для меняЕсли используются gnupg2 и gpg-agent 2.x, обязательно установите переменную окружения
GPG_TTY
.Смотрите документацию GPG об общих проблемах .
источник
set -x GPG_TTY (tty)
укажите свой профиль.su
наroot
на удаленном сервере~/.zshrc
и теперь я могу делать коммиты, теперь, когда она правильно подключается к терминалу. Спасибо за вашу помощь!Если ничего не получается, используйте,
GIT_TRACE=1
чтобы попытаться увидеть, что на самом деле делает git:Теперь выполните неудачную команду вручную:
Оказывается, мой ключ истек,
git
не виноват.источник
.git/config
былname
указан в одном проекте , который не соответствует моей подписи электронной почты. Этого было достаточно, чтобы отвергнуть это.gpg -bsau <key>
на моей машине ничего не выполняет. Предполагается, что это займет слишком много времени, чтобы выполнить? Или это означает, что ключ можно использовать? @ VonC какие-нибудь идеи?Я СДЕЛАН это через этот короткий и легкий рецепт:
Автоматическая подпись коммитов в macOS (глобально и с разными IDE):
Получите ваш
signingkey
в этом пути .Поместите в
gpg.conf
файл следующее (отредактируйте файлnano ~/.gnupg/gpg.conf
командой):Поместите в
gpg-agent.conf
файл следующее (отредактируйте файлnano ~/.gnupg/gpg-agent.conf
командой):Обновление :
Возможно, вам потребуется выполнить
killall gpg-agent
команду после редактирования файла конфигурацииgpg.conf
, согласно комментариям. Как говорит самоочевидная команда, эта команда завершит работу агента GPG (Gnu Privacy Guard).источник
killall gpg-agent
после установки файлов конфигурации, тогда это работало!pinentry-mac
? Я не говорю, что мы не можем, но организация GPGTools является резервной копией очень маленькой команды, и в репо есть только 5 участников против использования,brew install gnupg
которое использует работу gnupg.org .user.signingkey
набор, который я не заметил ни в своей конфигурации исходного дерева, ни в моих глобальных настройках (потому что я не думал смотреть на локальную конфигурацию). Убедитесь, что оба local (git config --local --get user.signingkey
) и global (git config --global --get user.signingkey
) одинаковы или, что еще лучше, сбрасывают локальный, если он недействителен (git config --local --unset user.signingkey
)Может помочь убить процесс,
gpg-agent
который может застрять со старыми данными. Таким образом, новыйgpg-agent
начал бы попросить пароль.источник
gpg-agent --daemon
для запускаkillall gpg-agent
gpgconf --kill gpg-agent
Следуйте приведенному ниже URL-адресу, чтобы настроить подписанный коммит https://help.github.com/en/articles/telling-git-about-your-signing-key
если по-прежнему получать gpg не удалось подписать данные фатально: не удалось записать объект фиксации
это не проблема с Git, это с GPG, выполните следующие шаги
1.
gpg --version
echo "test" | gpg --clearsign
если это показывает:
export GPG_TTY=$(tty)
4. затем снова попробуйте
echo "test" | gpg --clearsign
в котором получена подпись PGP.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6.apply
git commit -S -m "commitMsz"
источник
export GPG_TTY=$(tty)
был трюк. Добавил это в мой.zshrc
файлЛюбой, кто сталкивается с этой проблемой на компьютерах MacOS , попробуйте это:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(если нужно)gpg --full-generate-key
Создайте ключ с помощью алгоритма.gpg --list-keys
git config --global user.signingkey <Key from your list>
git config --global gpg.program /usr/local/bin/gpg
git config --global commit.gpgsign true
gpg --armor --export <key>
и добавьте этот ключ в GitHub в ключах GPG: https://github.com/settings/keys (с включенными строками START и END)Если проблема все еще существует:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Если проблема все еще существует:
Установите https://gpgtools.org и подпишите ключ, который вы использовали, нажав Sign в строке меню: Key -> Sign
Если проблема все еще существует:
Перейти к: Ваш глобальный
.gitconfig
файл , который в моем случае по адресу:/Users/gent/.gitconfig
И изменить .gitconfig файл (пожалуйста , убедитесь , что e - mail и имя одинаковы с той , которую вы создали при генерации ключа) :источник
Мои два цента здесь:
Когда вы создаете и добавляете ключ в gpg-agent, вы определяете что-то под названием
passphrase
. Теперь, когдаpassphrase
в какой-то момент истекает, иgpg
вам нужно ввести его снова, чтобы разблокировать ключ, чтобы вы могли снова начать подписывать.Когда вы используете любую другую программу, которая взаимодействует с
gpg
,gpg
подсказка для ввода вашей парольной фразы не появляется (в основном,gpg-agent
когда daemonized не может показать вам диалог ввода вstdin
).Одно из решений -
gpg --sign a_file.txt
ввести пароль, который вы ввели при создании ключа, и тогда все должно быть в порядке (gpg-agent
должно автоматически подписываться).Посмотрите этот ответ о том, как установить более длительные тайм-ауты для вашей парольной фразы, чтобы вам не приходилось делать это все время.
Или вы можете полностью удалить пароль с
ssh-keygen -p
Изменить: Сделайте,
man gpg-agent
чтобы прочитать некоторые вещи о том, как сделать это автоматически, и добавить строки:на вашем .bashrc, если вы используете bash (это правильный ответ, но я придерживаюсь вышеизложенного)
источник
Обновление октябрь 2016: в выпуске 871 упоминалось «В Git 2.9.3 перестала работать подпись»
Git для Windows 2.10.1, выпущенный два дня назад (4 октября 2016 г.), исправил подпись Interactive GPG о коммитах и тегах.
Оригинальный ответ:
Читая « 7.4 Git Tools - Подписание вашей работы », я предполагаю, что у вас есть «
user.signingkey
» набор конфигурации.Последний большой рефакторинг (перед Git 2.10) вокруг gpg был в коммите 2f47eae2a , здесь это сообщение об ошибке было перемещено в
gpg-interface.c
Журнал в этом файле показывает недавнее изменение в коммите af2b21e (Git 2.10)
Поэтому проверьте, как вы указали свою
user.signingkey
конфигурацию и версию gpg, которую вы используете (gpg1 или gpg2), чтобы узнать, как они влияют на сообщение об ошибке.Существует также коммит 0581b54, который изменяет условие для
gpg failed to sign the data
сообщения об ошибке (в дополнение к коммиту 0d2b664 ):В коммите 4322353 показано, что gpg теперь использует временный файл, поэтому возможны проблемы с этим.
источник
user.signingkey
конфиг установлен. Также используюgpg (GnuPG) 2.0.3
.Этот мерзавец был очень показателен для моей ситуации ...
Мне нужно было сгенерировать начальный ключ в соответствии с форматом, который
git
проверял. Лучше всего скопировать значение, переданное-bsau
выше, в журналах как есть и использовать ниже.Так и становится,
Тогда это сработало.
Надеюсь, это поможет.
источник
git trace
было действительно полезно.Используя cygwin, я недавно перешел на
gpg2
. Тогда у меня была такая же проблема для подписи с помощью git после установкиgit config gpg.program gpg2
.Попробуйте
echo "test" | gpg2 --clearsign
посмотреть, работает ли gpg2. Я нашел это самое простое решение, чтобы просто установитьgit config gpg.program gpg
, потому что это работает. Но вы также получите лучшую ошибку - например, вам нужно установить pinentry.источник
gpg: signing failed: Inappropriate ioctl for device
которую можно решитьexport GPG_TTY=$(tty)
. Источник: github.com/keybase/keybase-issues/issues/2798На OS X, используя
gnupg2
via brew, мне просто нужно было убить gpg agent , иногда случается:И установите
env
переменную, если необходимо:Смотрите также общие проблемы GPG и этот ответ здесь.
источник
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
.Я видел похожие ответы, но ничего похожего на то, что у меня сработало. В Linux мне пришлось убить и перезапустить мой
gpg-agent
с:Это помогло мне. Похоже, вам нужно
user.signingkey
установить свой закрытый ключ, а также то, что говорят некоторые другие комментарии.источник
Может быть, зависший gpg-агент.
Попробуйте
gpgconf --kill gpg-agent
как обсуждено здесьисточник
Я получил эту ошибку в Ubuntu 18.04, и оказалось, что срок действия моего ключа истек .
Чтобы увидеть это, я запустил это и подтвердил, что срок действия моих ключей истек:
Чтобы исправить это, я запустил (используя идентификатор, показанный в предыдущей команде):
Оттуда я продлил срок действия
key 0
иkey 1
следовал этим инструкциям, которые сводились к тому, чтобыkey 0
потом набирать текстexpire
и следовать подсказкам. Потом повторяем заkey 1
.Затем, чтобы проверить это, я побежал:
И до исправления произошел сбой с ошибкой:
Но после исправления та же команда успешно подписала сообщение, так что я знал, что все снова работает!
источник
Я столкнулся с той же проблемой. Я рад сообщить, что проблема не в,
git 2.10.0
а вgnupg 1.4.21
.Временное понижение версии gnupg до 1.4.20 исправило проблему для меня.
Если вы используете homebrew и обновили свои пакеты, как я, вы, вероятно, можете просто запустить,
brew switch gnupg 1.4.20
чтобы вернуться назад.источник
Убедитесь, что ваш адрес электронной почты настроен правильно.
источник
Если электронное письмо, связанное с uid вашего ключа GPG, отличается от электронного письма, которое вы используете в git, вам нужно добавить еще один идентификатор пользователя в ваш ключ ИЛИ использовать ключ, который точно соответствует электронному письму.
Вы можете добавить другой UID, используя:
См. Мо /superuser/293184/one-gnupg-pgp-key-pair-two-emails
источник
Я, должно быть, как-то случайно обновил gpg, потому что получил это после попытки проверить, работает ли gpg:
Бег
gpgconf --kill all
исправил это для меня.Надеюсь, это кому-нибудь поможет.
источник
У меня была похожая проблема с последними источниками Git (2.12.2), созданными вместе с последними источниками всех его зависимостей (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring и т. Д.).
Оказывается,
libreadline
давал GnuPG проблемы:И конечно, попытка получить полезную информацию с помощью Git
-vvv
не удалась, поэтому неудача была загадкой.Чтобы устранить ошибку PGP из-за ReadLine, следуйте инструкциям в разделе Не удается обновить или использовать менеджер пакетов - ошибка gpg :
источник
Ответы выше отличные, но у меня они не сработали. То, что решило мою проблему, было экспортировать как публичное, так и секретное ключей.
перечислите ключи с машины, с которой мы экспортируем
экспортировать ключи
перейти к машине, которую мы импортируем и импортировать
Бинго Бонго, все готово!
ссылка: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
пс. Мои ключи изначально были сделаны в bootcamp windows 7, и я экспортировал их на свой Mac Air (один и тот же физический компьютер, фактически другой)
источник
Я на Ubuntu 18.04 и получил ту же ошибку, беспокоился также в течение нескольких недель. Наконец понял, что gpg2 ни на что не указывает. Так просто беги
И тада, это работает как шарм.
Ваши коммиты теперь будут подтверждены тегом с ними.
источник
Я наткнулся на эту ошибку не из-за проблем с конфигурацией, а потому, что срок действия моего ключа истек. Самый простой способ продлить срок его действия в OSX - открыть приложение GPG Keychain (если оно у вас установлено), и оно автоматически предложит вам его продлить. Два щелчка, и все готово. Надеюсь, это поможет коллегам по Googles :)
источник
Это начало происходить внезапно для меня в Ubuntu, не уверен, что какое-то недавнее обновление сделало это, но ни одна из существующих проблем не была применима для меня (я
GPG_TTY
установил, попытался убить агента и т. Д.). Автономнаяgpg
команда не выполнялась с этой ошибкой:Я попытался запустить
gpg
с--debug-all
опцией и заметил следующий вывод:Вышесказанное указывает на наличие проблем с
pinentry
программой. Gpg, как правило, работаетpinentry-curses
для меня, поэтому я изменил егоpinentry-tty
(aptitude install
сначала мне пришлось ), и ошибка исчезла (хотя я больше не получаю полноэкранный ввод пароля, но мне все равно это не нравится). Для того, чтобы сделать эти изменения, я должен добавить строкуpinentry-program /usr/bin/pinentry-tty
в~/.gnupg/gpg-agent.conf
и убить агент сgpgconf --kill gpg-agent
(он перезапускается в следующий раз).источник
Ни один из приведенных выше ответов не соответствовал моей проблеме. Мой
gpg
бинарный файл (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) был установлен как часть GPG Suite , а не как brew.Тем не менее, я чувствовал, что совет сводился к следующему: «используйте тот
gpg
двоичный файл, который является последним доступным на brew». Итак, я попробовал:Я проверил, что я правильно изменил
gpg
на мой,$PATH
чтобы указать на новый исполняемый файл от brew:И я также явно сказал git, какой
gpg
двоичный файл использовать:Ну, может быть, это не совсем водонепроницаемо, так как это чувствительно к пути. На самом деле я не зашёл так далеко, чтобы подтвердить без сомнения, что Git переключился на вызов варева
gpg
.В любом случае: ничего этого было недостаточно, чтобы
git commit
снова успешно подписать мои коммиты.В конечном итоге у меня сработало обновление GPG Suite . Я запускал версию 2016.7 и обнаружил, что обновление до 2016.10 решило проблему для меня.
Я открыл
GPG Keychain.app
и нажал «Проверить наличие обновлений…». С новой версией: подписанные коммиты снова заработали правильно.источник
установил это просто:
источник
Очень похоже на @birchlabs, после долгих поисков и поисков я обнаружил, что это не GPG, а GPG Suite. Я сделал,
cask reinstall gpg-suite
и это решило это для меня.источник
Если это произошло случайно и в прошлом работало идеально, как в моем случае, попробуйте выйти из системы (
cmd+shift+q
) и снова войти в систему.источник
В моем случае ни одно из решений, упомянутых в другом ответе, не сработало. Я обнаружил, что проблема была характерна для одного хранилища. Удаление и клонирование репо снова решило проблему.
источник
Что-то странное, но убедитесь, что ваш терминал достаточно большой! Вы можете сказать, если он слишком маленький, запустив
echo test | gpg --clearsign
- он даст вам довольно очевидное сообщение об ошибке, сообщающее вам. Если он недостаточно велик, ваш агент GPG не сможет отобразить свой маленький блок ncurses.Это не будет применяться, если вы используете агент с графическим интерфейсом или что-то, что не использует ncurses.
источник