Saya mengikuti beberapa artikel di atas atribut cantik pada catatan rilis Git 2.10 . Melalui yang meningkatkan git ke 2.10.0 dan membuat perubahan ke global yang .gitconfig
menghasilkan sebagai berikut -
[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
Tetapi sekarang saya mencoba untuk menandatangani komitmen saya menggunakan
git commit -a -S -m "message"
Saya bisa melihat kesalahan berikut -
Anda memerlukan frasa sandi untuk membuka kunci kunci rahasia
pengguna: "XYZ (Ditandatangani Secara Digital)"
Kunci RSA 2048-bit, ID AAAAAAAAA, dibuat 2016-07-01
kesalahan: gpg gagal menandatangani data fatal: gagal menulis objek komit
Catatan - Saya masih bisa melakukan perubahan menggunakangit commit -a -m "message"
Apakah ada cara untuk mengatasi hal yang sama? Atau perubahan apa pun yang diperlukan pada gpg
konfigurasi agar dapat mengikuti peningkatan git?
Perbarui 1
Juga mencari kegunaan lebih lanjut, mengikuti Apakah ada cara untuk "autosign" melakukan di Git dengan kunci GPG? . Saya sudah mengkonfigurasi kunci menggunakan
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
dan tentu saja mendapatkan kesalahan yang sama pula.
sumber
gpg failed to sign the data
setiap kali saya gunakan-S
. Di 2.8, saya bisa menandatangani komit tanpa masalah. Saya tidak tahu apa yang terjadi.user.signingkey
memperbaiki masalah saya, anehnya.user.name
was! = Nama yang digunakan saat membuat kunci PGPJawaban:
Saya mengalami masalah dengan OSX ini.
Jawaban asli:
Sepertinya pembaruan gpg (buatan) diubah ke lokasi
gpg
menjadigpg1
, Anda dapat mengubah biner tempat git mencari gpg:Jika Anda tidak memiliki gpg1:
brew install gpg1
.Jawaban yang diperbarui:
Sepertinya gpg1 sudah usang / " tidak digunakan dengan lembut" , jadi Anda mungkin harus benar-benar memperbarui ke gpg2, sayangnya ini melibatkan beberapa langkah lagi / sedikit waktu:
Bagian pertama menginstal gpg2, dan yang terakhir adalah peretasan yang diperlukan untuk menggunakannya . Untuk pemecahan masalah, lihat jawaban ini (meskipun itu tentang linux bukan buatan), ini menyarankan tes yang bagus:
Jika tes ini berhasil (tidak ada kesalahan / keluaran termasuk tanda tangan PGP), Anda telah berhasil diperbarui ke versi gpg terbaru.
Anda sekarang dapat menggunakan penandatanganan git lagi!
Perlu dicatat bahwa Anda harus memiliki:
Catatan: Setelah menjalankan komit yang ditandatangani, Anda dapat memverifikasinya ditandatangani dengan:
yang akan mencakup info gpg untuk komit terakhir.
sumber
gnupg2
denganbrew
mengacaukan symlinkgpg
dihapus, saya telah memperbaiki tautan yang digunakanbrew link --overwrite gnupg2
.gpg1
adalah masih dapat dieksekusi dieksekusi.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
akhirnya memperbaikinya untuk sayaJika gnupg2 dan gpg-agent 2.x digunakan, pastikan untuk mengatur variabel lingkungan
GPG_TTY
.Lihat dokumentasi GPG tentang masalah umum .
sumber
set -x GPG_TTY (tty)
di profil Anda.su
untukroot
di server jauh~/.zshrc
dan saya dapat membuat komit lagi, sekarang terhubung dengan benar ke terminal. Terima kasih atas seluruh bantuan Anda!Jika semuanya gagal, gunakan
GIT_TRACE=1
untuk mencoba dan melihat apa yang sebenarnya dilakukan git:Sekarang jalankan perintah gagal secara manual:
Ternyata, kunciku sudah kedaluwarsa,
git
tidak bisa disalahkan.sumber
.git/config
telahname
menentukan dalam satu proyek yang tidak cocok dengan email saya yang masuk Itu cukup untuk menolaknya.gpg -bsau <key>
di komputer saya tidak menjalankan apa pun. Apakah ini kira terlalu lama untuk dieksekusi? Atau apakah itu berarti kuncinya baik-baik saja untuk digunakan? @VonC ada wawasan?Saya telah MELAKUKANNYA melalui resep pendek dan mudah ini :
Masuk otomatis dilakukan di macOS (Secara global dan dengan berbagai IDE):
Dapatkan Anda
signingkey
dengan cara ini .Masukkan yang berikut ini dalam
gpg.conf
file (edit file dengannano ~/.gnupg/gpg.conf
perintah):Masukkan yang berikut ini dalam
gpg-agent.conf
file (edit file dengannano ~/.gnupg/gpg-agent.conf
perintah):Perbarui :
Anda mungkin perlu menjalankan
killall gpg-agent
perintah setelah mengedit file konfigurasigpg.conf
,, sesuai dengan komentar. Seperti yang dikatakan perintah penjelasan sendiri, perintah ini akan menghentikan agen GPG (Penjaga Privasi Gnu).sumber
killall gpg-agent
setelah mengatur file konfigurasi, kemudian berhasil!pinentry-mac
? Saya tidak mengatakan kita tidak bisa, tetapi org GPGTools adalah cadangan oleh tim yang sangat kecil dan repo hanya memiliki 5 kontributor vs menggunakanbrew install gnupg
yang memanfaatkan karya gnupg.org .user.signingkey
set lokal yang tidak valid , yang tidak saya perhatikan dalam konfigurasi sumber saya, atau pengaturan global saya (karena saya tidak berpikir untuk melihat konfigurasi lokal) Pastikan kedua lokal (git config --local --get user.signingkey
) dan global (git config --global --get user.signingkey
) sama, atau bahkan lebih baik, batalkan yang lokal jika tidak valid (git config --local --unset user.signingkey
)Dapat membantu menghentikan proses
gpg-agent
yang mungkin macet dengan data lama. Jadi yang barugpg-agent
mulai akan meminta kata sandi.sumber
gpg-agent --daemon
untuk memulainyakillall gpg-agent
gpgconf --kill gpg-agent
Ikuti url di bawah ini untuk menyiapkan komit yang ditandatangani https://help.github.com/en/articles/telling-git-about-your-signing-key
jika masih mendapatkan gpg gagal menandatangani data fatal: gagal menulis objek komit
ini bukan masalah dengan git, ini dengan GPG ikuti langkah-langkah di bawah ini
1.
gpg --version
echo "test" | gpg --clearsign
jika ditampilkan:
export GPG_TTY=$(tty)
4. lalu coba lagi
echo "test" | gpg --clearsign
di mana tanda tangan PGP didapat.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6. berlaku
git commit -S -m "commitMsz"
sumber
export GPG_TTY=$(tty)
adalah triknya. Menambahkan itu ke.zshrc
file sayaBagi siapa saja yang menghadapi masalah ini pada mesin MacOS , coba ini:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(jika diperlukan)gpg --full-generate-key
Buat kunci dengan menggunakan algoritma.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>
dan tambahkan kunci ini ke GitHub di kunci GPG: https://github.com/settings/keys (dengan START dan END line disertakan)Jika masalah masih ada:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Jika masalah masih ada:
Pasang https://gpgtools.org dan tandatangani kunci yang Anda gunakan dengan menekan Masuk dari bilah menu: Kunci -> Masuk
Jika masalah masih ada:
Pergi ke: global Anda
.gitconfig
berkas yang dalam kasus saya adalah di:/Users/gent/.gitconfig
Dan memodifikasi .gitconfig berkas (pastikan Email dan Nama adalah sama dengan yang telah Anda buat sementara menghasilkan Key) :sumber
Dua sen saya di sini:
Saat Anda membuat dan menambahkan kunci ke agen gpg, Anda mendefinisikan sesuatu yang disebut
passphrase
. Sekarangpassphrase
di beberapa titik berakhir, dangpg
Anda perlu memasukkannya lagi untuk membuka kunci sehingga Anda dapat mulai masuk lagi.Ketika Anda menggunakan program lain yang berinteraksi dengan
gpg
, Andagpg
diminta untuk memasukkan frasa sandi Anda tidak muncul (pada dasarnyagpg-agent
ketika daemonized tidak dapat menampilkan dialog input pada Andastdin
).Salah satu solusinya adalah
gpg --sign a_file.txt
kemudian memasukkan frasa sandi yang telah Anda masukkan saat membuat kunci dan semuanya akan baik-baik saja (gpg-agent
harus secara otomatis masuk)Lihat jawaban ini tentang cara menetapkan batas waktu lebih lama untuk frasa sandi Anda sehingga Anda tidak harus melakukan ini sepanjang waktu.
Atau Anda dapat menghapus kata sandi sepenuhnya
ssh-keygen -p
Sunting: Lakukan
man gpg-agent
untuk membaca beberapa hal tentang bagaimana hal di atas terjadi secara otomatis dan tambahkan baris:di .bashrc Anda jika Anda menggunakan bash (ini adalah jawaban yang benar tapi saya tetap melatih pemikiran saya di atas)
sumber
Pembaruan Oktober 2016: masalah 871 menyebutkan "Masuk berhenti bekerja di Git 2.9.3"
Git untuk Windows 2.10.1 dirilis dua hari lalu (4 Oktober 2016) telah memperbaiki penandatanganan komitmen dan tag Interaktif GPG.
Jawaban asli:
Membaca " 7.4 Git Tools - Menandatangani Pekerjaan Anda ", saya anggap Anda telah
user.signingkey
menyetel konfigurasi " " Anda .Refactoring besar terakhir (sebelum Git 2.10) di sekitar gpg dilakukan di 2f47eae2a , di sini pesan kesalahan dipindahkan ke
gpg-interface.c
Log pada file itu mengungkapkan perubahan terbaru dalam commit af2b21e (Git 2.10)
Jadi periksa bagaimana Anda menentukan
user.signingkey
konfigurasi Anda , dan versi gpg yang Anda gunakan (gpg1 atau gpg2), untuk melihat apakah mereka memiliki efek pada pesan kesalahan.Ada juga commit 0581b54 yang mengubah kondisi untuk
gpg failed to sign the data
pesan kesalahan (sebagai pelengkap untuk melakukan 0d2b664 ):Komit 4322353 menunjukkan gpg sekarang menggunakan file sementara, sehingga mungkin ada masalah yang tepat di sekitar itu.
sumber
user.signingkey
set konfigurasi saya . Juga menggunakangpg (GnuPG) 2.0.3
.Jejak git sangat mengungkapkan situasi saya ...
Saya perlu membuat kunci awal per format yang
git
diperiksa. Cara terbaik untuk menyalin nilai yang diteruskan ke-bsau
atas dalam log seperti apa adanya dan gunakan di bawah ini.Jadi itu menjadi,
Lalu berhasil.
Semoga itu bisa membantu.
sumber
git trace
sangat membantu.Menggunakan cygwin, saya baru saja beralih ke
gpg2
. Lalu saya punya masalah yang sama untuk masuk dengan git setelah pengaturangit config gpg.program gpg2
.Coba
echo "test" | gpg2 --clearsign
lihat apakah gpg2 berfungsi. Saya menemukan ini solusi termudah untuk ditetapkangit config gpg.program gpg
, karena itu berfungsi. Tetapi Anda juga akan mendapatkan kesalahan yang lebih baik dengan cara ini - mis. Anda perlu menginstal pinentry.sumber
gpg: signing failed: Inappropriate ioctl for device
yang bisa diselesaikan olehexport GPG_TTY=$(tty)
. Sumber: github.com/keybase/keybase-issues/issues/2798Pada OS X, menggunakan
gnupg2
via minuman saya hanya perlu membunuh agen gpg , kadang-kadang terjadi:Dan atur
env
variabel jika perlu:Lihat Masalah umum GPG juga dan jawaban ini di sini juga.
sumber
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
.Saya telah melihat jawaban yang sama, tetapi tidak persis seperti apa yang berhasil untuk saya. Di Linux, saya harus mematikan dan memulai kembali
gpg-agent
dengan:Ini berhasil bagi saya. Sepertinya Anda perlu
user.signingkey
mengatur ke kunci pribadi Anda juga dari apa yang dikatakan beberapa komentar lain.sumber
Mungkin menjadi agen gpg gantung.
Coba
gpgconf --kill gpg-agent
seperti yang dibahas di sinisumber
Saya mendapatkan kesalahan ini di Ubuntu 18.04 dan ternyata kunci saya telah kedaluwarsa .
Untuk melihat ini, saya menjalankan ini dan mengkonfirmasi bahwa kunci saya telah kedaluwarsa:
Untuk memperbaikinya, saya berlari (menggunakan ID yang ditampilkan pada perintah sebelumnya):
Dari sana, saya memperpanjang kedaluwarsa
key 0
dankey 1
mengikuti instruksi ini yangkey 0
kemudian menjadi mengetikexpire
dan mengikuti perintah. Lalu ulangi untukkey 1
.Setelah itu, untuk menguji ini, saya berlari:
Dan sebelum perbaikan, gagal dengan kesalahan:
Tetapi setelah perbaikan, perintah yang sama berhasil menandatangani pesan itu sehingga saya tahu semuanya berjalan kembali!
sumber
Saya mengalami masalah yang sama. Saya senang melaporkan bahwa masalahnya bukan terletak pada
git 2.10.0
tetapi dengangnupg 1.4.21
.Menurunkan sementara gnupg ke 1.4.20 memperbaiki masalah untuk saya.
Jika Anda menggunakan homebrew dan Anda memutakhirkan paket-paket Anda seperti yang saya lakukan, Anda mungkin bisa menjalankannya
brew switch gnupg 1.4.20
untuk kembali.sumber
Pastikan Anda mengatur email dengan benar.
sumber
Jika email yang dikaitkan dengan kunci GPG Anda berbeda dengan email yang Anda gunakan di git, Anda harus menambahkan id pengguna lain ke kunci Anda ATAU menggunakan kunci yang persis sama dengan email.
Anda dapat menambahkan UID lain dengan menggunakan:
Lihat mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails
sumber
Saya pasti secara tidak sengaja memperbarui gpg karena saya mendapatkan ini setelah mencoba menguji apakah gpg berfungsi:
Menjalankan
gpgconf --kill all
memperbaikinya untukku.Semoga ini bisa membantu seseorang.
sumber
Saya memiliki masalah serupa dengan sumber Git terbaru (2.12.2) yang dibangun bersama dengan sumber terbaru dari semua dependensinya (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, dll).
Ternyata
libreadline
memberi masalah GnuPG:Dan tentu saja, berusaha mendapatkan informasi yang bermanfaat dari Git dengan
-vvv
gagal, sehingga kegagalan itu menjadi misteri.Untuk mengatasi kegagalan PGP karena ReadLine, ikuti instruksi di Tidak dapat memperbarui atau menggunakan manajer paket - kesalahan gpg :
sumber
Jawaban di atas bagus tetapi tidak berhasil untuk saya. Yang memecahkan masalah saya adalah mengekspor baik publik maupun rahasia kunci kunci .
daftar kunci dari mesin tempat kami mengekspor
ekspor kunci
buka mesin yang kami impor dan impor
bingo bongo, kamu sudah selesai!
referensi: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
ps. Kunci saya awalnya dibuat pada bootcamp windows 7 dan saya mengekspornya ke mac air saya (mesin fisik yang sama, berbeda secara virtual)
sumber
Saya di Ubuntu 18.04 dan mendapat kesalahan yang sama, khawatir selama berminggu-minggu juga. Akhirnya menyadari bahwa gpg2 tidak mengarah ke apa pun. Jadi jalankan saja
Dan tada, itu bekerja seperti pesona.
Komit Anda sekarang akan memiliki tag yang diverifikasi dengannya.
sumber
Saya menemukan kesalahan ini bukan karena masalah konfigurasi, tetapi karena kunci saya kedaluwarsa. Cara termudah untuk memperpanjang validitasnya pada OSX adalah dengan membuka aplikasi Keychain GPG (jika sudah terpasang) dan secara otomatis akan meminta Anda untuk memperpanjangnya. Dua klik, dan Anda selesai. Semoga ini bisa membantu sesama Googler :)
sumber
Ini mulai terjadi tiba-tiba bagi saya di Ubuntu, tidak yakin apakah beberapa pembaruan baru-baru ini melakukannya, tetapi tidak ada masalah yang ada yang berlaku bagi saya (saya telah
GPG_TTY
menetapkan, mencoba membunuh agen, dll.).gpg
Perintah mandiri gagal dengan kesalahan ini:Saya mencoba menjalankan
gpg
dengan--debug-all
pilihan dan melihat di bawah ini keluaran:Di atas menunjukkan bahwa ada beberapa masalah dengan
pinentry
program ini. Gpg biasanya berjalanpinentry-curses
untuk saya, jadi saya mengubahnya kepinentry-tty
(saya harusaptitude install
terlebih dahulu) dan kesalahan hilang (meskipun saya tidak lagi mendapatkan entri kata sandi layar penuh, tapi saya tidak suka itu). Untuk melakukan perubahan ini, saya harus menambahkan barispinentry-program /usr/bin/pinentry-tty
ke~/.gnupg/gpg-agent.conf
dan membunuh agen dengangpgconf --kill gpg-agent
(itu akan dimulai kembali di waktu berikutnya).sumber
Tidak ada jawaban di atas yang cocok dengan masalah saya.
gpg
Biner saya (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) dipasang sebagai bagian dari GPG Suite , bukan oleh minuman.Namun demikian, saya merasa bahwa sarannya adalah: "menggunakan
gpg
biner mana pun yang terbaru yang tersedia pada minuman". Jadi saya mencoba:Saya memverifikasi bahwa saya telah benar mengubah
gpg
pada saya$PATH
untuk menunjuk ke executable baru dari minuman:Dan saya juga secara eksplisit memberi tahu git
gpg
biner mana yang akan digunakan:Yah, mungkin itu tidak sepenuhnya kedap air, karena sensitif terhadap jalan. Aku tidak benar-benar pergi sejauh memastikan tanpa keraguan bahwa git telah beralih untuk meminta minuman itu
gpg
.Dalam kasus apa pun: semua ini tidak cukup untuk
git commit
berhasil menandatangani komitmen saya lagi.Yang akhirnya berhasil bagi saya adalah memperbarui GPG Suite . Saya menjalankan versi 2016.7, dan saya menemukan bahwa memperbarui ke 2016.10 memperbaiki masalah bagi saya.
Saya membuka
GPG Keychain.app
, dan menekan "Periksa pembaruan ...". Dengan versi baru: komit yang ditandatangani berfungsi dengan benar lagi.sumber
dapatkan pengaturannya hanya dengan:
sumber
Sangat mirip @birchlabs, setelah banyak menggali / mencari saya menemukan bahwa itu bukan GPG, melainkan GPG Suite. Saya lakukan
cask reinstall gpg-suite
dan itu menyelesaikannya untuk saya.sumber
Jika ini hanya terjadi secara acak dan telah berfungsi dengan baik di masa lalu, seperti kasus saya, coba logout (
cmd+shift+q
) dan masuk kembali. Bekerja untuk sayasumber
Dalam kasus saya, tidak ada solusi yang disebutkan dalam jawaban lain yang berfungsi. Saya menemukan bahwa masalahnya khusus untuk satu repositori. Menghapus dan mengkloning repo kembali memecahkan masalah.
sumber
Agak aneh, tapi pastikan terminal Anda cukup besar! Anda dapat mengetahui apakah itu terlalu kecil dengan menjalankan
echo test | gpg --clearsign
- itu akan memberi Anda pesan kesalahan yang cukup jelas untuk memberi tahu Anda. Jika tidak cukup besar, agen GPG Anda tidak dapat menampilkan kotak ncurses kecilnya.Yang ini tidak akan berlaku jika Anda menggunakan agen GUI atau sesuatu yang tidak menggunakan ncurses.
sumber