Podpisanie polecenia git nie powiodło się: klucz tajny jest niedostępny


87

Otrzymuję ten błąd podczas próby zatwierdzenia za pomocą 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

Wygenerowałem nowy klucz, jak poniżej, ale nadal daje ten sam błąd

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

Tajny klucz jest taki sam jak powyżej

Znalazłem to Generowanie klucza GPG do tagowania git i postępowałem zgodnie z instrukcjami, ale nadal nie działa, jakiś pomysł?


3
W przypadku użytkowników systemu Windows ten błąd jest znacznie bardziej prawdopodobny, ponieważ Git w systemie Windows nie używa prawidłowego gpg. Nie znajdując poprawnego pliku binarnego w PATH, git ucieka się do używania wewnętrznie dołączonego gpg w swoim zminimalizowanym MSYS, który nie ma wiedzy o tym, gdzie są twoje klucze. Ustawienie zmiennych gpg.program lub G (NU) PGHOME rozwiązałoby problem, jak określono w kilku z poniższych odpowiedzi.
— Abel Cheung

Odpowiedzi:


79

Musisz skonfigurować tajny klucz przed jego użyciem.

git config user.signingkey 35F5FFB2

Lub zadeklaruj to globalnie, jeśli chcesz używać tego samego klucza dla każdego repozytorium.

git config --global user.signingkey 35F5FFB2

Źródło: Git Tools - Signing Your Work


Bardzo dziękuję Leonardo! To działa!! Przepraszam, jeśli pytanie było głupie, nie miałem pojęcia, jak je rozwiązać.
— Emilio Menéndez

Świetny! Określenie klucza podpisywania użytkownika spowoduje również obejście wielu adresów e-mail na jednym kluczu i niezgodności między adresem e-mail git a pierwszym adresem w kluczu.
— user2943160

1
Czy przechowywanie pliku .gitconfig z tajnym kluczem w publicznym repozytorium jest bezpieczne?
— melihovv

1
do wiadomości, jak @melihovv zapytał o: - Tajny klucz musi znajdować się w twojej bazie kluczy GPG. Tylko identyfikator skrótu tego klucza jest przechowywany w pliku config.
— BRPocock

2
Musiałem to zrobić razem z git config --global gpg.program gpg2.
— Splaktar

112

To zadziałało dla mnie w systemie Windows 10 (zwróć uwagę, że używam bezwzględnej ścieżki do gpg.exe):

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

To był błąd, który otrzymałem przed naprawą:

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
Mam ten błąd secret key not availablez VS Code i ustawienie gpg.exelokalizacji rozwiązało go.
— Dawid

2
To zadziałało również dla mnie. Zwłaszcza po wykonaniu kroków konfiguracyjnych z samego githuba .
— Bas G

1
Za każdym razem, gdy instaluje się moja kompilacja Windows Insider, ta opcja jest resetowana. Dzięki za to :)
— VRG

To zadziałało również dla mnie po dodaniu bezwzględnej ścieżki gpg. Wielkie dzięki.
— Adarsh ​​Srivastava

tak, jest to ważne, ponieważ git ma własne gpg i większość ludzi zainstaluje gpg dla Windows i zaimportuje klucz prywatny przez kleopatrę, a tylko „główny” gpg zna lokalizację klucza. Świetna odpowiedź
— Paweł Cioch

64

U mnie zadziałało dodawanie

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

Jeśli chcesz znaleźć pełną ścieżkę do pliku gpg2.exe:

where gpg2.exe

3
W zależności od zainstalowanej wersji GnuPG, musisz to zrobić gpg.exezamiast gpg2.exe.
— Mark Rotteveel,

14

Lubię uzupełniać wszystkie te odpowiedzi, ponieważ mam z tym wiele problemów.

Te przykłady używają --globalflagi, ale możesz ją usunąć, jeśli chcesz to zrobić lokalnie.

Skonfiguruj tajny klucz w git

git config --global user.signingkey 35F5FFB2

Skonfiguruj program witch gpg do użycia w git (opcjonalnie)

Niektóre systemy (Ubuntu dla exemple) mogą mieć gpgi gpg2w tym samym czasie. Musisz określić, że będziesz używaćgpg2

git config --global gpg.program gpg2

Eksportuj GPG_TTY (opcjonalnie)

Jeśli użyjesz tej komendy w środowisku ssh, może wystąpić następujący błąd: Inappropriate ioctl for devicelub gpg: échec de la signature : Ioctl() inapproprié pour un périphérique. Można to naprawić poprzez:

export GPG_TTY=$(tty)

Automatyczne włączanie śpiewu GPG (opcjonalnie)

git config --global commit.gpgsign true

Jak to wyłączyć, jeśli nie chcesz już go używać?
— Madona Syombua

1
Możesz dodać --unsetflagę do tych git configpoleceń, aby je wyłączyć
— alphayax

Właściwie użyłem tej konfiguracji git --global commit.gpgsign true, ale powiedziałem false.
— Madona Syombua

7

Miałem sytuację, w której to samo działo się ze mną na komputerze z systemem 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

Polecenia "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGi gpg --list-secret-keys --keyid-format LONGgdzie dają mi kompletne różne wyniki!

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

Główny powód był związany z poprzednimi odpowiedziami, ale w innym sensie:

  • Tworzyłem klucze gpg przy użyciu git (skonfigurowanej ścieżki) wersji GPG
  • Git został skonfigurowany do używania pobranej wersji gpg do zatwierdzenia.
  • Wydaje się, że implementacje GPG używają własnej bazy danych i magazynu certyfikatów.

Mam nadzieję, że może to pomóc każdemu, kto natknie się na tę wiadomość, a poprzednie odpowiedzi nie rozwiązują jego problemu.


Musiałem dodać tajny klucz do Kleopatry z eksportu CLI, ponieważ społeczność Visual Studio wydaje się używać go domyślnie do podpisywania, podczas gdy jako Git CLI używała innej listy / implementacji i dlatego nadal działała bez Kleopatry.
— Nithish

5

Musisz ustawić zmienną GNUPGHOME. Bez tego GnuPG nie będzie w stanie znaleźć twoich kluczy.

# On unix add it to your path

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

W systemie Unix po prostu dodaje go do ścieżki.
W systemie Windows musisz otworzyć panel sterowania i ustawić go jako

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg

1
Dla mnie tak nie było GNUPGHOME. U GPGHOMEmnie to działa
— Sysix

1

Miałem ten sam problem, że nazwa gita i sklep e-mail w .gitconfig różniły się od tych z dostarczonego klucza gpg. Zmieniłem je, żeby pasowały i zaczęło działać.


1

Użycie "C:\Program Files\Git\usr\bin\gpg.exe"było dla mnie rozwiązaniem.
Musiałem odinstalować Kleopatrę. Z tym to nie działało.

Podsumowując;

  • Nie ma potrzeby kleopatry, zamiast tego użyj domyślnego 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

Może musisz sklonować własne repozytorium, do którego masz prawa. Miałem ten problem, gdy sklonowałem repozytorium innej osoby.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.