Właśnie zacząłem używać git i instaluję git i gpg przez homebrew. Z jakiegoś powodu pojawia się ten błąd, gdy git commit
spojrzałem na tak wiele innych pytań dotyczących tego tematu i żadne z nich nie zadziałało. Jak mogę naprawić ten błąd, aby móc pomyślnie przesłać.
error: gpg failed to sign the data
fatal: failed to write commit object
git config --local user.signingkey
właściwy klucz, a zostanie ponownie automatycznie podpisany. i możegit config --global --unset user.signingkey
Odpowiedzi:
Aby rozwiązać problem, najpierw spróbuj dwóch rzeczy:
git config --global gpg.program gpg2
, aby upewnić się, że git używa,gpg2
a niegpg
echo "test" | gpg2 --clearsign
, aby upewnićgpg2
się, że działaJeśli wszystko wygląda dobrze, spróbuj jeszcze jednej rzeczy:
brew install pinentry
aby upewnić się, że masz zainstalowane dobre narzędzie do wprowadzania hasłaJeśli po tej instalacji i ponownej próbie
git commit
nadal pojawia sięfailed to sign the data
błąd „ ”:gpgconf --kill gpg-agent
aby zabić uruchomionego agenta, który mógł zostać zawieszonyJeśli mówi, że
gpgconf
nie jest zainstalowana lub nie ma--kill
opcji, może spróbuj tego:cp ~/.gnupg ~/.gnupg-GOOD
aby zapisać kopię swojego konta,~/.gnupg
aby w razie potrzeby powrócić do późniejbrew install gnupg21
aby zainstalować GnuPG 2.1Powodem zapisania kopii
~/.gnupg
katalogu jest to, że GnuPG 2.1 potencjalnie tworzy / zmienia niektóre kluczowe dane w sposób, który nie jest wstecznie kompatybilny z GnuPG 2.0 i wcześniejszymi, więc jeśli chcesz wrócić później, możesz to zrobićmv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.W przeciwnym razie należy wykonać kilka podstawowych czynności, aby sprawdzić, czy masz działające środowisko GnuPG:
gpg2 -K --keyid-format SHORT
, aby sprawdzić, czy masz co najmniej jedną parę kluczyJeśli wynik tego pokaże, że nie masz tajnego klucza do użycia przez GnuPG, musisz go utworzyć:
gpg2 --gen-key
, aby GnuPG przeprowadził Cię przez kolejne etapy tworzenia pary kluczyJeśli pojawi się komunikat o błędzie „Nieodpowiedni ioctl dla urządzenia” , zrób tak:
export GPG_TTY=$(tty)
i / lub dodaj to do swojego~/.bashrc
lub˜/.bash_profile
źródło
gpg2 --gen-key
, to musisz zrobić najpierw.export GPG_TTY=$(tty)
. O ile istnieje sposób na użycie git bez gpg, powinieneś być w stanie to zrobić domyślnie lub po prostu uruchamiającgit config --global commit.gpgsign false
globalnie cofnięte podpisywanie zatwierdzeń przez gpg.echo "test" | gpg2 --clearsign
, znalazłem błąd i prowadzi mnie do tego wątku , który rozwiązał mój problem: po prostu włożyłemexport GPG_TTY=$(tty)
do mojego˜/.bash_profile
pliku i ponownie załadowałemsource ˜/.bash_profile
Git musi wiedzieć, którym kluczem się podpisuje.
Po skonfigurowaniu plików GPG, gpg-agent i plików gpg.conf (zobacz ten przewodnik ), musisz uruchomić
Oczywiście zamień na koniec klucz publiczny swoim własnym. Jeśli chcesz, aby każde zatwierdzenie było domyślnie podpisywane, użyj
źródło
W jakiś sposób twój git jest skonfigurowany do podpisywania każdego zatwierdzenia przez GPG. Podpisywanie za pomocą GPG nie jest wymagane do zatwierdzania lub wypychania za pomocą git. Prawdopodobnie powoduje to błąd, ponieważ Twój mechanizm podpisywania gpg nie jest jeszcze skonfigurowany.
Jeśli jesteś nowy w git, spróbuj najpierw uruchomić go bez podpisywania GPG, a następnie dodaj logowanie później, jeśli naprawdę tego potrzebujesz.
Możesz sprawdzić, jak Twój git jest skonfigurowany w odniesieniu do gpg, wykonując:
Które mogą generować zero lub więcej linii, w tym:
Jeśli „commit.gpgsign” ma wartość true, oznacza to, że masz włączone podpisywanie gpg. Wyłącz to za pomocą:
Następnie spróbuj ponownie uruchomić zatwierdzenie. Powinien teraz działać bez podpisywania gpg. Po uzyskaniu podstawowego działania gita, powinieneś spróbować dodać podpisywanie gpg z powrotem do miksu.
źródło
git config --global --unset commit.gpgsign
pracował dla mnie :)Zapoznaj się z @sideshowbarker i rozwiązaniem @Xavier Ho, rozwiązałem mój problem, wykonując następujące kroki.
Załóżmy, że gpg2 zainstalowany przez brew,
Przypomniał mi kolega, trzeba dołączyć
do ~ / .zshrc, jeśli używasz zsh, w przeciwnym razie dołącz do ~ / .bash_profile
W przypadku systemu macOS
gpg2 jest połączone z gpg w brew, stąd polecenie gpg jest skierowane do gpg2
i jest pinentry-mac do wpisywania hasła
Dodaj linię
Przypomniał mi kolega, trzeba dołączyć
do ~ / .zshrc, jeśli używasz zsh, w przeciwnym razie dołącz do ~ / .bash_profile
źródło
Używam tego. Obsługuje zsha i działa na podsystemie Windows dla systemu Linux:
źródło
Sprawdź, czy Twój klucz wygasł. Po ustaleniu daty ważności (nie ma potrzeby tworzenia nowego klucza, chyba że chcesz),
git
będzie działać normalnie.Jeden ze sposobów naprawienia wygasłego klucza:
(Uwaga:
$
reprezentuje wiersz polecenia, wpisz polecenia po monicie; naciśnij klawisz Enter po każdym poleceniu)$ gpg2 --list-keys
aby znaleźć odpowiedni identyfikator klucza (po znaków\
napub
linię)$ gpg2 --edit-key <key id>
- to otwiera powłokę gpg ze zmianą znaku zachęty nagpg>
gpg> expire
- postępuj zgodnie z instrukcjami, aby ustawić nową datę ważności klucza podstawowegoNastępnie, jeśli istnieją podklucze, które wygasły (są
sub
wyświetlane w wierszu), zresetuj również ich daty wygaśnięcia:gpg> key 1
- wybiera pierwszy podkluczgpg> expire
- postępuj zgodnie z instrukcjami, aby ustawić nową datę ważności dla podkluczaW razie potrzeby powtórz dla każdego kolejnego podklucza.
źródło
save
w zachęcie gpg, kiedy skończysz!To działało dla mnie na ubuntu 18.04
Sprawdź swój klucz gpg
jeśli otrzymasz pustą odpowiedź, wygeneruj klucz GPG
uruchom ponownie pierwszą komendę, powinieneś otrzymać wynik jako:
ustaw klawisz śpiewania git
więc jesteś gotowy! (--global jest opcjonalne)
Alternatywnie, jeśli nie masz nic przeciwko podpisywaniu się za pomocą klucza SSH
Zwróć uwagę, że nie jest to zalecane ze względu na problem z bezpieczeństwem, zgodnie z tym pytaniem tutaj i tutaj
źródło
Musiałem naprawić gpg.program na ścieżkę bezwzględną do gpg:
Używam systemu Windows z cygwin.
źródło
choco install gpg4win
Rozwiązanie:
Źródło
źródło
Ten błąd może również wystąpić, gdy wygasła ważność klucza GPG. Wygenerowanie nowego klucza i dodanie go do Git powinno rozwiązać ten problem.
źródło
Wystąpił ten problem po aktualizacji do gnupg 2.x. Okazało się, że gpg2 odwołuje się do kluczy w inny sposób: nadal miałem
signingkey = ABC98F11
(ustawienie gpg v1) w pliku~/.gitconfig
. Kluczowe identyfikatory dla gpg2 są dłuższe. Wyszukaj je za pomocągpg --list-secret-keys
źródło
Zrobiłem
git
klucz z 3 oddzielnymi kluczami dlacertify
/sign
/encrypt
i klucz pokazał, że wygasł w przyszłości (po kilku dniach pracy dobrze):utworzono nowy klucz bez dodawania oddzielnych podkluczy w celu rozwiązania problemu.
źródło
Być może Twoja konfiguracja Gita została ustawiona na gpgsign = true . Spróbuj ustawić to na false, jeśli nie chcesz przypisywać swoich zatwierdzeń. Przejdź do folderu repozytorium i zmień plik
Od tego...
Do tego...
źródło
Dla mnie ten błąd zaczął wystąpić
git tag -s
na Debian GNU / Linux, gdy przeszedłem odpinentry-gnome3
dopinentry-curses
(za pomocąupdate-alternatives --config pinentry
) dla łatwiejszego dostępu zdalnego. Wystąpiło tylko z samym sobągit tag -s
, a niegpg
(np.gpg --clearsign
).Jedyną zmianą niezbędną do przywrócenia działania w tym przypadku było dodanie
export GPG_TTY=$(tty)
do moich plików startowych powłoki.Nie otrzymałem jednak komunikatu o błędzie „Nieodpowiedni ioctl dla urządzenia” wymienionego jako wskaźnik tej poprawki w innej odpowiedzi na to pytanie.
Uwaga: Ponieważ przyczyna pojawienia się tego błędu była zupełnie inna niż w przypadku tych, którzy zasugerowali
export GPG_TTY=$(tty)
wcześniej (zwykle jako poboczna wskazówka) w innych odpowiedziach na to pytanie, zdecydowałem, że to pytanie wymaga innej odpowiedzi, która wspomina, żeexport GPG_TTY=$(tty)
może to być główna poprawka i jedyna rzecz niezbędna w niektórych przypadkach.źródło
update-alternatives --config pinentry
zrobił to dla mnie. Jestem SSH na moim pulpicie i zostałempinentry
ustawiony na/usr/bin/pinentry-gnome3
(co powinno mieć rezerwę TTY po SSH w lub po przełączeniu na konsolę wirtualną). Ale najwyraźniej nie działało. Ustawienie wartości domyślnej/usr/bin/pinentry-tty
załatwiło sprawę. Być może będę musiał to ustawić z powrotem, gdy wrócę do pulpitu, ale na razie wszystko jest w porządku.export GPG_TTY=$(tty)
nie wystarczyło. Zrobiłem to, ale musiałem się przełączyć,pinentry
zanim mogłem podpisać zobowiązanie.Rozwiązaniem tego problemu było upewnienie się, że nazwa klucza jest zgodna z moją nazwą użytkownika git. Zakładam, że e-maile też muszą się zgadzać. Może to mieć związek z używaniem GPG KeyChain na moim Macu. Niepewny.
Myślałem, że nazywam klucz, kiedy to wypełniałem, ale wydaje mi się, że pytałem o moje imię (nazwa użytkownika git).
źródło
Miałem ten błąd na macos - aby spróbować rozwiązać problem, próbowałem wyświetlić listę kluczy, aby sprawdzić, czy wygasły przy użyciu
gpg2 --list-keys
- sprawdziłem, że klucze nie wygasły i że właściwy klucz został ustawiony w mojej konfiguracji przy użyciugit config --global user.signingkey
.Po uruchomieniu tych poleceń nagle mogłem bez problemu ponownie wykonywać podpisane zatwierdzenia. Nie zmieniłem swoich plików konfiguracyjnych ani kluczy - nie utworzyłem nawet nowej instancji Terminala. Wyglądało na to, że gpg2 był w jakimś dziwnym stanie na moim Macu.
źródło
Rozwiązałem problem z instalacją,
brew install gpg2
a potem robiłemgit config --global gpg.program gpg2
źródło
Ten sam błąd może być również spowodowany utratą ważności klucza w konfiguracji git.
Sprawdź zawartość
cat .git/config
i poszukajsigningkey
wartości i sprawdź, czy wygasła. Jeśli tak, zaktualizuj go nowym.źródło
Jeśli używasz karty inteligentnej / yubikey do przechowywania klucza GPG i ustawisz
signkey
konfigurację git za pomocą klucza przechowywanego na karcie (a wszystkie powyższe odpowiedzi wydają się nie rozwiązać problemu), zablokowany kod PIN karty może być główna przyczyna tego problemu.Aby sprawdzić zablokowany kod PIN:
Jeśli licznik jest podobny do
Następnie Twój PIN jest blokowany (po 3 nieudanych próbach).
Aby odblokować kod PIN:
źródło
Dla mnie proste
brew unintstall gnupg && brew cask reinstall gpg-suite
rozwiązanie problemu.Odinstalowuje (w moim przypadku) ręcznie homebrew-istalled gpg i ponownie instaluje cały pakiet GPG.
źródło
W moim przypadku miałem mieszaną konfigurację gpg i konfigurację smimesign podaną w dokumentacji podpisywania zmian tutaj: https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing- klucz
Po kilku godzinach pracy nad tym znalazłem najlepszy sposób na naprawienie tego, że wszystko związane z gpg jest wyłączone i rekonfiguracja gpg.
Jak wspomniano w odpowiedzi @Jason Thrasher, znajdź całą konfigurację git związaną z gpg za pomocą:
Następnie wyłącz wszystko golablly i lokalnie za pomocą:
Następnie skonfiguruj ponownie zgodnie z oficjalną dokumentacją podaną powyżej. Mam nadzieję że to pomoże.
źródło
Jeśli wcześniej skonfigurowałeś pinentry i gpg i przestało działać znikąd:
Sprawdź, czy twój gpg działa:
Jeśli tak
gpg: signing failed: No pinentry
, po prostu zrestartuj klienta demona gpg, który od czasu do czasu zacina się:Teraz powinno działać:
źródło
W moim przypadku ten błąd wystąpił podczas uruchamiania
git commit
w małymtmux
oknie, które nie było w stanie dopasować się do monitu o hasło.źródło
To pomoże ci się go pozbyć
git config commit.gpgsign false
źródło