Ошибка подписания коммита git: секретный ключ недоступен

87

Я получаю эту ошибку при попытке зафиксировать с помощью Git.

gpg: skipped "name <name@mail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

Я создал новый ключ, как показано ниже, но он по-прежнему дает ту же ошибку

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <name@mail.com>
sub   2048R/112A8C2D 2016-04-23

Секретный ключ такой же, как указано выше

Я нашел это Создание ключа GPG для тегов git и выполнил шаги, но это все еще не работает, есть идеи?

Эмилио Менендес
источник
3
Для пользователей Windows эта ошибка гораздо более вероятна, потому что Git в Windows не использует правильный gpg. Не найдя правильный двоичный файл в PATH, git прибегает к использованию внутреннего связанного gpg внутри своего миниатюрного MSYS, который не знает, где находятся ваши ключи. Установка переменных gpg.program или G (NU) PGHOME решит эту проблему, как указано в нескольких ответах ниже.
Абель Чунг

Ответы:

79

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

git config user.signingkey 35F5FFB2

Или объявите его глобально, если вы хотите использовать один и тот же ключ для каждого репозитория.

git config --global user.signingkey 35F5FFB2

Источник: Инструменты Git - подписание вашей работы

Леонардо Эмануэль Алифрако
источник
Большое спасибо Леонардо! Оно работает!! Извините, если вопрос был глупый, я понятия не имел, как его решить.
Эмилио Менендес
Превосходно! Указание ключа подписи пользователя также позволит избежать наличия нескольких адресов электронной почты на одном ключе и несоответствия между адресом электронной почты git и первым адресом в ключе.
user2943160 08
1
Безопасно ли хранить .gitconfig с секретным ключом в публичном репо?
melihovv 02
1
для записи, как @melihovv спросил о: - Секретный ключ должен быть на вашем связке ключей GPG. В конфигурации хранится только хэш-идентификатор этого ключа.
BRPocock
2
Я должен был сделать это вместе с git config --global gpg.program gpg2.
Splaktar
112

Это сработало для меня в Windows 10 (обратите внимание, что я использую абсолютный путь к gpg.exe):

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

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

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
Wakeel
источник
2
Получил эту ошибку secret key not availableс помощью VS Code, и установка gpg.exeместоположения решила ее.
Давид
2
Это сработало и для меня. Особенно после выполнения шагов настройки из самого github .
Bas G
1
Каждый раз, когда устанавливается моя сборка Windows Insider, этот параметр сбрасывается. Спасибо за это :)
VRG
Это сработало и для меня после добавления абсолютного пути к gpg. Большое спасибо.
Адарш Шривастава
да, это важно, поскольку у git есть собственный gpg, и большинство людей установят gpg для Windows и импортируют приватный ключ через kleopatra, и только «основной» gpg знает о местонахождении ключа. Отличный ответ
Павел Чох
64

Что сработало для меня, так это добавление

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

Если вы хотите найти полный путь к gpg2.exe:

where gpg2.exe
Пол Ван Блейдл
источник
3
В зависимости от установленной версии GnuPG вам нужно сделать это gpg.exeвместо gpg2.exe.
Марк Роттевил
14

Я хотел бы заполнить все эти ответы, потому что у меня с этим много проблем.

Эти примеры используют --globalфлаг, но вы можете удалить его, если хотите, чтобы эти вещи были локально.

Настроить секретный ключ в git

git config --global user.signingkey 35F5FFB2

Настройте использование программы witch gpg в git (необязательно)

Некоторые системы (например, Ubuntu) могут иметь gpgи gpg2одновременно. Вам необходимо указать, что вы будете использоватьgpg2

git config --global gpg.program gpg2

Экспорт GPG_TTY (необязательно)

Если вы используете эту команду в среде ssh, возможно, вы получите следующую ошибку: Inappropriate ioctl for deviceили gpg: échec de la signature : Ioctl() inapproprié pour un périphérique. Это можно исправить с помощью:

export GPG_TTY=$(tty)

Автоматическое включение пения GPG (необязательно)

git config --global commit.gpgsign true
Alphayax
источник
Как его отключить, если вы больше не хотите его использовать?
Мадона Сёмбуа 08
1
Вы можете добавить --unsetфлаг к этим git configкомандам, чтобы отключить его
alphayax 09
Я действительно использовал этот git config --global commit.gpgsign true, но сказал false.
Мадона Сёмбуа 09
7

У меня была ситуация, когда то же самое происходило со мной на машине с Windows 10.

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

Команды "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGи gpg --list-secret-keys --keyid-format LONGгде дают мне совершенно разные результаты!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

Основная причина была связана с предыдущими ответами, но в другом смысле:

  • Я создавал ключи gpg, используя версию GPG git (настроенный путь)
  • Git был настроен на использование загруженной версии gpg для фиксации.
  • Кажется, реализации GPG используют свою собственную базу данных сертификатов и хранилище.

Я надеюсь, что это поможет любому, кто наткнется на это сообщение, и предыдущие ответы не решают эту проблему.

will824
источник
Пришлось добавить секретный ключ к kleopatra из экспорта cli, поскольку сообщество Visual Studio, похоже, использует его по умолчанию для подписи, тогда как git cli использовал другой список / реализацию и, следовательно, все еще работал без kleopatra.
Нитиш
5

Вы должны установить переменную GNUPGHOME. Без него GnuPG не сможет найти ваши ключи.

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg

В Unix он просто добавляет его в путь.
В Windows вам нужно открыть панель управления и установить ее как

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg
CodeWizard
источник
1
Для меня это было не так GNUPGHOME. С GPGHOMEним работает у меня
Sysix
1

У меня была та же проблема, что имя git и адрес электронной почты в .gitconfig отличались от предоставленного ключа gpg. Я поменял их, чтобы они соответствовали друг другу, и все заработало.

Патрисио Перпетуа
источник
1

Использование "C:\Program Files\Git\usr\bin\gpg.exe"было для меня решением.
Пришлось удалить клеопатру. С ним ничего не вышло.

Итак, подводя итоги;

  • Нет необходимости в клеопатре, вместо этого используйте GIT по умолчанию.

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    
Антониу Алмейда
источник
-4

Может быть, вам нужно клонировать собственный репозиторий, на который у вас есть права. У меня возникла эта проблема, когда я клонировал репозиторий другого человека.

user6671429
источник