Не вдалося підписати git коміт: секретний ключ недоступний


84

Я отримую цю помилку при спробі зафіксувати за допомогою 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 дозволить це вирішити, як зазначено в декількох відповідях нижче.
Абель Чеунг

Відповіді:


78

Вам потрібно налаштувати секретний ключ перед його використанням.

git config user.signingkey 35F5FFB2

Або заявіть про це глобально, якщо ви хочете використовувати один і той же ключ для кожного сховища.

git config --global user.signingkey 35F5FFB2

Джерело: Git Tools - Підписання вашої роботи


Велике спасибі, Леонардо! Це працює!! Вибачте, якщо питання було безглуздим, я не уявляв, як його вирішити.
Еміліо Менендес,

Відмінно! Вказавши ключ підписання користувача, також буде обійдено наявність декількох адрес електронної пошти на одному ключі та невідповідність між електронною поштою git та першою адресою на ключі.
user2943160

1
Чи безпечно зберігати .gitconfig із секретним ключем у відкритому репо?
melihovv

1
для запису, як @melihovv запитував про: - Секретний ключ повинен бути на вашому брелоку GPG. У конфігурі зберігається лише ідентифікатор хешу цього ключа.
BRPocock,

2
Мені довелося це робити разом із git config --global gpg.program gpg2.
Splaktar

108

Це працювало для мене в 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

2
Отримав цю помилку secret key not availableз кодом VS і встановлення gpg.exeрозташування вирішило.
Давид,

2
Це спрацювало і на мене. Особливо після виконання кроків налаштування з самого github .
Bas G

1
Кожного разу, коли встановлюється моя збірка Windows Insider, ця опція скидається. Дякую за це :)
VRG

Це спрацювало і на мене після додавання абсолютного шляху 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.
Mark Rotteveel,

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

Як вимкнути його, якщо ви більше не хочете ним користуватися?
Madona Syombua

1
Ви можете додати --unsetпрапор у ці git configкоманди, щоб вимкнути його
alphayax

Я насправді використовував цей git config --global commit.gpgsign true, але сказав false.
Мадона Сембуа

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, використовуючи git (налаштований шлях) версію GPG
  • Git було налаштовано на використання завантаженої версії gpg для коміту.
  • Здається, реалізації GPG використовують власну базу даних сертифікатів та сховище.

Сподіваюсь, це може допомогти кожному, хто натрапляє на це повідомлення, а попередні відповіді не вирішують проблеми.


Довелося додати секретний ключ до kleopatra від експорту cli, оскільки спільнота візуальної студії, схоже, використовує це за замовчуванням для підписання, де як git cli використовувався інший список / реалізація і, отже, все ще працював без kleopatra.
Nithish

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

1
Для мене це не було GNUPGHOME. З GPGHOMEним працює для мене
Sysix

1

У мене була та сама проблема, що ім'я git та магазин електронної пошти в .gitconfig відрізнялися від тих, що містяться у ключі gpg. Я змінив їх, щоб відповідати, і це почало працювати.


0

Використання "C:\Program Files\Git\usr\bin\gpg.exe"було рішення для мене.
Довелося видалити клеопатру. З цим це не працювало.

Отже, підбиваючи підсумки;

  • Немає необхідності в kleopatra, використовуйте замість цього 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

Можливо, вам потрібно клонувати власне сховище, де ви маєте права. У мене виникла ця проблема, коли я клонував сховище іншої людини.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.