Śledziłem kilka artykułów na temat pięknych atrybutów informacji o wersji Git 2.10 . Przechodzenie przez które uaktualniłem gita do 2.10.0 i wprowadziłem zmiany w globalnej .gitconfig
następująco:
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[user]
name = xyz
email = [email protected]
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
Ale teraz, gdy próbuję podpisać swoje zobowiązania za pomocą
git commit -a -S -m "message"
Widzę następujący błąd -
Aby odblokować tajny klucz, potrzebujesz hasła
użytkownik: „XYZ (podpisany cyfrowo)”
2048-bitowy klucz RSA, ID AAAAAAAA, utworzony 01.01.2016
błąd: gpg nie podpisał danych krytycznych: nie można zapisać obiektu zatwierdzenia
Uwaga - nadal mogę zatwierdzać zmiany za pomocągit commit -a -m "message"
Czy istnieje sposób na przezwyciężenie tego samego? Lub jakakolwiek zmiana wymagana w gpg
konfiguracjach, aby dogadać się z aktualizacją git?
Aktualizacja 1
Poszukuję także dalszej przydatności, po Czy istnieje sposób na „autosign” zatwierdzający w Git kluczem GPG? . Klucz został już skonfigurowany za pomocą
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
i oczywiście pojawia się ten sam błąd.
źródło
gpg failed to sign the data
każdym razem, gdy używam-S
. W 2.8 mogę bez problemu podpisać zatwierdzenie. Nie wiem co się stało.user.signingkey
naprawiło mój problem, o dziwo.user.name
was! = Nazwa używana podczas tworzenia klucza PGPOdpowiedzi:
Wystąpił ten problem z OSX.
Oryginalna odpowiedź:
Wygląda na to, że aktualizacja gpg (naparu) została zmieniona na lokalizację
gpg
nagpg1
, możesz zmienić plik binarny, w którym git sprawdza gpg:Jeśli nie masz gpg1:
brew install gpg1
.Zaktualizowana odpowiedź:
Wygląda na to, że gpg1 jest przestarzałe / „delikatnie przestaje być używane” , więc prawdopodobnie powinieneś zaktualizować gpg2, niestety wymaga to jeszcze kilku kroków / trochę czasu:
Pierwsza część instaluje gpg2, a druga to włamanie wymagane do jego użycia . Aby rozwiązać problemy, zapoznaj się z tą odpowiedzią (choć dotyczy Linuksa, a nie parzenia), sugeruje dobry test:
Jeśli test zakończy się powodzeniem (brak błędu / danych wyjściowych zawiera sygnaturę PGP), pomyślnie zaktualizowano do najnowszej wersji gpg.
Powinieneś teraz móc ponownie używać podpisywania git!
Warto zauważyć, że musisz mieć:
Uwaga: po uruchomieniu zatwierdzonego podpisu możesz go zweryfikować za pomocą:
który będzie zawierał informacje gpg dla ostatniego zatwierdzenia.
źródło
gnupg2
zbrew
pomieszanymi z dowiązaniami symbolicznymigpg
została w związku z tym usuniętabrew link --overwrite gnupg2
.gpg1
jest to nadal plik wykonywalny z eksportem.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
w końcu to naprawiłJeśli używane są gnupg2 i gpg-agent 2.x, należy ustawić zmienną środowiskową
GPG_TTY
.Zobacz dokumentację GPG na temat typowych problemów .
źródło
set -x GPG_TTY (tty)
swój profil.su
sięroot
na zdalnym serwerze~/.zshrc
i mogę ponownie zatwierdzać zmiany, teraz, gdy poprawnie łączy się ona z terminalem. Dzięki za wszelką pomoc!Jeśli wszystko zawiedzie, użyj,
GIT_TRACE=1
aby sprawdzić, co właściwie robi git:Teraz uruchom ręcznie błędne polecenie:
Okazuje się, mój klucz wygasł,
git
nie można go winić.źródło
.git/config
miałname
określony w jednym projekcie, który nie pasował do mojego e-maila do podpisu. To wystarczyło, aby to odrzucić.gpg -bsau <key>
na moim komputerze niczego nie wykonuje. Czy to ma trwać zbyt długo, aby wykonać? Czy to oznacza, że można użyć klucza? @VonC jakieś spostrzeżenia?Mam Sporządzono go przez ten krótki i łatwy przepis:
Automatyczne podpisywanie zatwierdza w systemie macOS (globalnie i przy użyciu różnych IDE):
Zdobądź
signingkey
w ten sposób .Umieść następujące dane w
gpg.conf
pliku (edytuj plik za pomocąnano ~/.gnupg/gpg.conf
polecenia):Umieść następujące dane w
gpg-agent.conf
pliku (edytuj plik za pomocąnano ~/.gnupg/gpg-agent.conf
polecenia):Aktualizacja :
Może być konieczne wykonanie
killall gpg-agent
polecenia po edycji pliku konfiguracjigpg.conf
, zgodnie z komentarzami. Jak mówi samoobjaśniające polecenie, to polecenie spowoduje zakończenie działania agenta GPG (Gnu Privacy Guard).źródło
killall gpg-agent
po ustawieniu plików konfiguracyjnych, a potem zadziałało!pinentry-mac
? Nie twierdzę, że nie możemy, ale organizacja GPGTools jest tworzona przez bardzo mały zespół, a repo ma tylko 5 autorów,brew install gnupg
którzy korzystają z gnupg.org .user.signingkey
zestaw lokalny , czego nie zauważyłem w mojej konfiguracji sourcetree, ani w moich ustawieniach globalnych (ponieważ nie myślałem, aby spojrzeć na lokalną konfigurację) Upewnij się, że zarówno lokalny (git config --local --get user.signingkey
) i global (git config --global --get user.signingkey
) są takie same, a nawet lepiej, rozbroić lokalny, jeśli jest nieprawidłowy (git config --local --unset user.signingkey
)Może pomóc w zabiciu procesu,
gpg-agent
który może utknąć w starych danych. Więc nowygpg-agent
zaczął prosić o hasło.źródło
gpg-agent --daemon
aby go uruchomićkillall gpg-agent
gpgconf --kill gpg-agent
Postępuj zgodnie z poniższym adresem URL, aby skonfigurować podpisane zatwierdzenie https://help.github.com/en/articles/telling-git-about-your-signing-key
jeśli nadal uzyskiwanie gpg nie udało się podpisać danych krytycznych: nie można zapisać obiektu zatwierdzenia
to nie jest problem z gitem, to z GPG wykonaj poniższe kroki
1.
gpg --version
echo "test" | gpg --clearsign
jeśli pokazuje:
export GPG_TTY=$(tty)
4. następnie ponownie spróbuj uzyskać
echo "test" | gpg --clearsign
podpis PGP.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6. zastosuj
git commit -S -m "commitMsz"
źródło
export GPG_TTY=$(tty)
była sztuczka. Dodałem to do mojego.zshrc
plikuKażdemu, kto napotyka ten problem na komputerach MacOS , spróbuj:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(Jeśli potrzebne)gpg --full-generate-key
Utwórz klucz za pomocą algorytmu.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>
i dodaj ten klucz do GitHub w kluczach GPG: https://github.com/settings/keys (z dołączoną linią START i END)Jeśli problem nadal występuje:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Jeśli problem nadal występuje:
Zainstaluj https://gpgtools.org i podpisz użyty klucz, naciskając Znak z paska menu: Klawisz -> Podpisz
Jeśli problem nadal występuje:
Przejdź do: globalnym
.gitconfig
pliku, który w moim przypadku jest:/Users/gent/.gitconfig
i modyfikować .gitconfig pliku (należy upewnić się, że e-mail i nazwa są takie same, z tym, który został utworzony podczas generowania klucza) :źródło
Moje dwa centy tutaj:
Kiedy tworzysz i dodajesz klucz do gpg-agent, definiujesz coś o nazwie
passphrase
. Teraz, gdypassphrase
w pewnym momencie wygasa, igpg
musisz wprowadzić go ponownie, aby odblokować klucz, abyś mógł zacząć podpisywać ponownie.Gdy używasz innego programu, z którym współpracujesz
gpg
,gpg
monit o podanie hasła nie pojawia się (w zasadzie,gpg-agent
gdy demonizowany nie może wyświetlić okna dialogowego wprowadzania wstdin
).Jednym z rozwiązań jest
gpg --sign a_file.txt
wprowadzenie hasła, które wprowadziłeś podczas tworzenia klucza, a następnie wszystko powinno być w porządku (gpg-agent
powinno się automatycznie podpisać)Zobacz tę odpowiedź na temat ustawiania dłuższych limitów czasu dla hasła, abyś nie musiał tego robić cały czas.
Lub możesz całkowicie usunąć hasło za pomocą
ssh-keygen -p
Edycja: zrób a,
man gpg-agent
aby przeczytać kilka rzeczy o tym, jak powyższe dzieje się automatycznie i dodaj linie:na swoim .bashrc, jeśli używasz bash (jest to poprawna odpowiedź, ale utrzymuję mój tok myślenia powyżej)
źródło
Aktualizacja października 2016: wydanie 871 wspomniano „Podpisywanie przestało działać w Git 2.9.3”
Git dla Windows 2.10.1 wydany dwa dni temu (4 października 2016) naprawił podpisywanie interaktywnych GPG w commits i tagach.
Oryginalna odpowiedź:
Czytając „ 7.4 Git Tools - podpisywanie swojej pracy ”, zakładam, że masz
user.signingkey
skonfigurowaną konfigurację.Ostatnim dużym refaktoryzowaniem (przed Git 2.10) wokół gpg było zatwierdzenie 2f47eae2a , tutaj ten komunikat o błędzie został przeniesiony do
gpg-interface.c
Dziennik tego pliku ujawnia ostatnią zmianę w zatwierdzeniu af2b21e (Git 2.10)
Sprawdź więc, jak określiłeś swój
user.signingkey
konfigurację oraz używaną wersję gpg (gpg1 lub gpg2), aby sprawdzić, czy mają one wpływ na komunikat o błędzie.Istnieje również zatwierdzenie 0581b54, które zmienia warunek
gpg failed to sign the data
komunikatu o błędzie (w uzupełnieniu do zatwierdzenia 0d2b664 ):Zatwierdzenie 4322353 pokazuje, że gpg używa teraz pliku tymczasowego, więc mogą występować odpowiednie problemy.
źródło
user.signingkey
skonfigurowaną konfigurację. Również za pomocągpg (GnuPG) 2.0.3
.Ślad git był bardzo odkrywczy dla mojej sytuacji ...
Musiałem wygenerować klucz początkowy dla
git
sprawdzanego formatu . Najlepiej jest skopiować przekazaną wartość-bsau
dzienników w obecnej postaci i użyć poniżej.Więc staje się
Potem zadziałało.
Mam nadzieję, że to pomaga.
źródło
git trace
było bardzo pomocne.Korzystając z cygwin, niedawno przełączyłem się na
gpg2
. Potem miałem ten sam problem z podpisywaniem się z git po ustawieniugit config gpg.program gpg2
.Spróbuj
echo "test" | gpg2 --clearsign
sprawdzić, czy gpg2 działa. Znalazłem to najłatwiejsze rozwiązanie do ustawieniagit config gpg.program gpg
, ponieważ to działa. Ale w ten sposób otrzymasz lepszy błąd - np. Że musisz zainstalować pinentry.źródło
gpg: signing failed: Inappropriate ioctl for device
który można rozwiązaćexport GPG_TTY=$(tty)
. Źródło: github.com/keybase/keybase-issues/issues/2798Na OS X, używając
gnupg2
via brew musiałem zabić agenta gpg , czasem się zdarza:W
env
razie potrzeby ustaw zmienną:Zobacz także typowe problemy z GPG i tę odpowiedź tutaj.
źródło
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
.Widziałem podobne odpowiedzi, ale nic dokładnie nie działało dla mnie. W systemie Linux musiałem zabić i uruchomić ponownie za
gpg-agent
pomocą:To załatwiło sprawę. Wygląda na to, że musisz również
user.signingkey
ustawić swój klucz prywatny na podstawie tego, co mówią inne komentarze.źródło
Może być wiszącym agentem gpg.
Spróbuj
gpgconf --kill gpg-agent
jak omówiono tutajźródło
Otrzymałem ten błąd na Ubuntu 18.04 i okazało się, że mój klucz wygasł .
Aby to zobaczyć, uruchomiłem to i potwierdziło, że moje klucze wygasły:
Aby to naprawić, uruchomiłem (używając identyfikatora wyświetlonego w poprzednim poleceniu):
Stamtąd rozszerzył wygaśnięcie
key 0
ikey 1
następującą instrukcją , która sprowadzała się do pisaniakey 0
wtedyexpire
i postępując zgodnie z instrukcjami. Następnie powtarzam dlakey 1
.Następnie, aby to przetestować, uruchomiłem:
A przed poprawką nie powiodło się z błędem:
Ale po poprawce to samo polecenie pomyślnie podpisało wiadomość, więc wiedziałem, że wszystko znowu działa!
źródło
Natrafiłem na ten sam problem. Z przyjemnością informuję, że problem nie leży w tym,
git 2.10.0
ale w czymgnupg 1.4.21
.Tymczasowe obniżenie gnupga do 1.4.20 naprawiło problem.
Jeśli używasz homebrew i zaktualizowałeś swoje pakiety tak jak ja, prawdopodobnie możesz po prostu uruchomić,
brew switch gnupg 1.4.20
aby przywrócić.źródło
Upewnij się, że masz poprawnie ustawiony adres e-mail.
źródło
Jeśli wiadomość e-mail przypisana do identyfikatora UID klucza GPG jest inna niż wiadomość e-mail używana w git, musisz dodać kolejny identyfikator użytkownika do swojego klucza LUB użyć klucza, który dokładnie pasuje do wiadomości e-mail.
Możesz dodać kolejny identyfikator UID, używając:
Zobacz mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails
źródło
Musiałem jakoś przypadkowo zaktualizować gpg, ponieważ dostałem to po próbie sprawdzenia, czy gpg działa:
Bieganie
gpgconf --kill all
naprawiło to dla mnie.Mam nadzieję, że to komuś pomoże.
źródło
Miałem podobny problem z najnowszymi źródłami Gita (2.12.2) zbudowanymi wraz z najnowszymi źródłami wszystkich jego zależności (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring itp.).
Okazuje się,
libreadline
że powodował problemy z GnuPG:I oczywiście próba uzyskania przydatnych informacji od Gita
-vvv
nie powiodła się, więc niepowodzenie było tajemnicą.Aby rozwiązać błąd PGP z powodu ReadLine, postępuj zgodnie z instrukcjami w Nie można zaktualizować lub użyć menedżera pakietów - błąd gpg :
źródło
Powyższe odpowiedzi są świetne, ale dla mnie nie zadziałały. Rozwiązaniem mojego problemu było wyeksportowanie zarówno kluczy publicznych, jak i tajnych .
wypisz klucze z komputera, z którego eksportujemy
eksportuj klucze
przejdź do maszyny, do której importujemy i importujemy
bingo bongo, gotowe!
odniesienie: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
ps. Moje klucze zostały pierwotnie wykonane w systemie Windows 7 Bootcamp i wyeksportowałem je na Mac Mac Air (ta sama fizyczna maszyna, inna wirtualnie)
źródło
Jestem na Ubuntu 18.04 i dostałem ten sam błąd, martwiłem się także przez tygodnie. Wreszcie zdałem sobie sprawę, że gpg2 nie wskazuje na nic. Po prostu biegnij
I tada, działa jak urok.
Twoje zatwierdzenia będą teraz weryfikować przy użyciu tagu.
źródło
Natknąłem się na ten błąd nie z powodu problemów z konfiguracją, ale dlatego, że mój klucz wygasł. Najłatwiejszym sposobem przedłużenia ważności w OSX jest otwarcie aplikacji pęku kluczy GPG (jeśli masz ją zainstalowaną) i automatycznie poprosi o jej przedłużenie. Dwa kliknięcia i gotowe. Mam nadzieję, że pomaga to innym pracownikom Google :)
źródło
To zaczęło się dla mnie nagle pojawiać na Ubuntu, nie jestem pewien, czy zrobiła to ostatnia aktualizacja, ale żaden z istniejących problemów mnie nie dotyczył (
GPG_TTY
ustawiłem, próbowałem zabić agenta itp.). Samodzielnegpg
polecenie zakończyło się niepowodzeniem z powodu tego błędu:Próbowałem uruchomić
gpg
z--debug-all
opcją i zauważyłem poniższy wynik:Powyższe wskazuje, że jest jakiś problem z
pinentry
programem. Gpg normalnie działapinentry-curses
dla mnie, więc zmieniłem go napinentry-tty
(musiałemaptitude install
to najpierw) i błąd zniknął (chociaż nie otrzymuję już hasła do pełnego ekranu, ale i tak mi się nie podoba). Aby dokonać tej zmiany, musiałem dodać liniępinentry-program /usr/bin/pinentry-tty
do~/.gnupg/gpg-agent.conf
i zabić agenta zgpgconf --kill gpg-agent
(robi wznowiona następnym razem).źródło
Żadna z powyższych odpowiedzi nie pasowała do mojego problemu. Mój
gpg
plik binarny (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) został zainstalowany jako część pakietu GPG , a nie przez brew.Niemniej jednak czułem, że rada sprowadza się do: „używaj dowolnego pliku
gpg
binarnego, który jest najnowszym dostępnym w parzeniu”. Więc próbowałem:Potwierdziłem, że poprawnie zmieniłem
gpg
mój,$PATH
aby wskazać nowy plik wykonywalny z brew:I również wyraźnie powiedziałem git, którego pliku
gpg
binarnego użyć:Cóż, może nie jest to całkowicie wodoszczelne, ponieważ jest wrażliwe na ścieżkę. Właściwie nie posunąłem się aż tak daleko, by potwierdzić ponad wszelką wątpliwość, że git przeszedł na inwokowanie naparu
gpg
.W każdym razie: nic z tego nie wystarczyło, aby
git commit
pomyślnie podpisać moje zobowiązania.Ostatecznie działała dla mnie aktualizacja GPG Suite . Korzystałem z wersji 2016.7 i stwierdziłem, że aktualizacja do 2016.10 rozwiązała problem.
Otworzyłem
GPG Keychain.app
i nacisnąłem „Sprawdź aktualizacje…”. W nowej wersji: podpisane zatwierdzenia znów działały poprawnie.źródło
skonfigurowałem po prostu:
źródło
Bardzo podobnie jak @birchlabs, po wielu kopaniach / poszukiwaniach odkryłem, że to nie GPG, a raczej GPG Suite. Zrobiłem to
cask reinstall gpg-suite
i dla mnie to rozwiązało.źródło
Jeśli zdarzyło się to losowo i działało doskonale w przeszłości, tak jak w moim przypadku, spróbuj wylogować się (
cmd+shift+q
) i zalogować ponownie. Pracowałem dla mnieźródło
W moim przypadku żadne z rozwiązań wymienionych w innej odpowiedzi nie zadziałało. Dowiedziałem się, że problem dotyczy jednego repozytorium. Ponowne usunięcie i klonowanie repozytorium rozwiązało problem.
źródło
To trochę dziwne, ale upewnij się, że twój terminal jest wystarczająco duży! Możesz stwierdzić, czy jest za mały, uruchamiając
echo test | gpg --clearsign
- wyświetli dość oczywisty komunikat o błędzie, informujący o tym. Jeśli nie jest wystarczająco duży, Twój agent GPG nie może wyświetlić swojego małego pola ncurses.Ten nie będzie obowiązywał, jeśli używasz agenta GUI lub czegoś, co nie używa ncurses.
źródło