Saya baru saja mulai menggunakan git dan saya menginstal git dan gpg melalui homebrew. Untuk beberapa alasan, saya mendapatkan kesalahan ini ketika saya melakukannya git commit
saya melihat banyak pertanyaan stackoverflow lainnya mengenai topik ini dan tidak ada satupun yang bekerja untuk saya. Bagaimana saya dapat memperbaiki kesalahan ini sehingga saya dapat mengunggah dengan sukses.
error: gpg failed to sign the data
fatal: failed to write commit object
git config --local user.signingkey
ke kunci yang benar dan itu akan otomatis lagi. dan mungkin menghapus yang global dengangit config --global --unset user.signingkey
Jawaban:
Untuk pemecahan masalah, dua hal yang harus dicoba pertama kali:
git config --global gpg.program gpg2
, untuk memastikan git menggunakangpg2
dan tidakgpg
echo "test" | gpg2 --clearsign
, untuk memastikangpg2
dirinya berfungsiJika semuanya tampak baik-baik saja, satu hal lagi yang perlu dicoba:
brew install pinentry
untuk memastikan Anda memiliki alat yang bagus diinstal untuk entri frasa sandiJika setelah itu instal dan Anda coba lagi
git commit
dan masih mendapatkan "failed to sign the data
" kesalahan:gpgconf --kill gpg-agent
untuk membunuh agen berjalan yang mungkin digantungJika itu mengatakan
gpgconf
tidak diinstal atau tidak memiliki--kill
opsi, Anda dapat mencoba ini:cp ~/.gnupg ~/.gnupg-GOOD
untuk menyimpan salinan Anda~/.gnupg
untuk dikembalikan lagi nanti jika diperlukanbrew install gnupg21
untuk menginstal GnuPG 2.1Alasan untuk menyimpan salinan
~/.gnupg
dir Anda adalah bahwa GnuPG 2.1 berpotensi membuat / mengubah beberapa data kunci dengan cara yang tidak kompatibel dengan GnuPG 2.0 dan sebelumnya, jadi jika Anda ingin kembali lagi nanti, Anda dapat melakukannyamv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.Jika tidak, ada beberapa langkah dasar yang harus dijalankan untuk memeriksa Anda memiliki lingkungan GnuPG yang berfungsi:
gpg2 -K --keyid-format SHORT
, untuk memeriksa apakah Anda memiliki setidaknya satu pasangan kunciJika output yang menunjukkan Anda tidak memiliki kunci rahasia untuk digunakan GnuPG, maka Anda perlu membuatnya:
gpg2 --gen-key
, agar GnuPG memandu Anda melalui langkah-langkah untuk membuat pasangan kunciJika Anda mendapatkan pesan kesalahan yang mengatakan "ioctl tidak sesuai untuk perangkat" , lakukan ini:
export GPG_TTY=$(tty)
dan / atau tambahkan itu ke~/.bashrc
atau˜/.bash_profile
sumber
gpg2 --gen-key
sebelumnya, itulah yang perlu Anda lakukan terlebih dahulu.export GPG_TTY=$(tty)
. Sejauh jika ada cara untuk menggunakan git tanpa gpg, Anda harus dapat melakukannya secara default atau hanya dengan menjalankangit config --global commit.gpgsign false
secara global setel gpg penandatanganan komitmen Anda.echo "test" | gpg2 --clearsign
, menemukan kesalahan dan itu membawa saya ke utas ini , yang memecahkan masalah saya: Saya baru saja memasukkan sebuahexport GPG_TTY=$(tty)
ke dalam˜/.bash_profile
file saya dan kemudian memuat ulang dengansource ˜/.bash_profile
Git perlu tahu kunci apa yang ditandatanganinya.
Setelah Anda menyiapkan GPG, agen gpg, dan file gpg.conf Anda (lihat panduan ini ), Anda perlu menjalankan
Jelas, ganti kunci publik di akhir dengan milik Anda. Jika Anda ingin setiap komit ditandatangani secara default, gunakan
sumber
Entah bagaimana git Anda dikonfigurasi untuk menandatangani setiap komitmen GPG. Masuk dengan GPG tidak diharuskan untuk melakukan atau mendorong menggunakan git. Kemungkinan memberikan kesalahan karena mekanisme penandatanganan gpg Anda belum dikonfigurasi.
Jika Anda baru menggunakan git, cobalah membuatnya bekerja terlebih dahulu tanpa masuk GPG terlebih dahulu, lalu tambahkan masuk nanti jika Anda benar-benar membutuhkannya.
Anda dapat memverifikasi bagaimana git Anda dikonfigurasi sehubungan dengan gpg dengan melakukan:
Yang dapat menghasilkan nol atau lebih garis, termasuk:
Jika "commit.gpgsign" benar, maka Anda mengaktifkan penandatanganan gpg. Nonaktifkan dengan:
Kemudian coba jalankan komit Anda lagi. Sekarang seharusnya berjalan tanpa penandatanganan gpg. Setelah git dasar berfungsi, Anda harus mencoba menambahkan gpg yang masuk kembali ke dalam campuran.
sumber
git config --global --unset commit.gpgsign
bekerja untuk saya :)Lihat @sontonbarker, dan solusi @Xavier Ho, saya memecahkan masalah saya melalui langkah-langkah berikut.
Asumsikan gpg2 diinstal oleh minuman,
Diingatkan oleh rekan saya, perlu ditambahkan
ke ~ / .zshrc jika menggunakan zsh, atau tambahkan ke ~ / .bash_profile
Untuk macOS,
gpg2 dikombinasikan dengan gpg dalam minuman dan karenanya perintah gpg diarahkan ke gpg2
dan ada pinentry-mac untuk entri frasa sandi
Tambahkan baris
Diingatkan oleh rekan saya, perlu ditambahkan
ke ~ / .zshrc jika menggunakan zsh, atau tambahkan ke ~ / .bash_profile
sumber
Saya menggunakannya. Ini memiliki dukungan untuk zsha dan berfungsi di Windows Subsystem untuk Linux:
sumber
Periksa kunci Anda untuk kedaluwarsa. Setelah Anda memperbaiki tanggal kedaluwarsa (tidak perlu membuat kunci baru kecuali jika Anda mau),
git
akan berfungsi seperti biasa.Salah satu cara untuk memperbaiki kunci yang kadaluarsa:
(Catatan:
$
mewakili prompt baris perintah, ketikkan perintah setelah prompt; tekan Enter setelah setiap perintah)$ gpg2 --list-keys
untuk menemukan tombol yang sesuai id (karakter setelah\
padapub
baris)$ gpg2 --edit-key <key id>
- ini membuka shell gpg, dengan prompt berubah menjadigpg>
gpg> expire
- ikuti instruksi untuk menetapkan tanggal kedaluwarsa baru untuk kunci utamaSelanjutnya, jika ada subkunci yang kedaluwarsa (
sub
tayang di telepon), atur ulang tanggal kedaluwarsa mereka juga:gpg> key 1
- pilih subkey pertamagpg> expire
- ikuti instruksi untuk mengatur tanggal kedaluwarsa baru untuk subkeyUlangi untuk setiap subkunci berikutnya, sesuai kebutuhan.
sumber
save
di gpg prompt setelah selesai!Ini bekerja untuk saya di ubuntu 18.04
Periksa kunci gpg Anda
jika Anda mendapatkan respons kosong, buat kunci GPG
jalankan kembali perintah pertama, Anda harus mendapatkan output sebagai:
mengatur kunci git bernyanyi
maka kamu baik untuk pergi! (--global adalah opsional)
Atau jika Anda tidak keberatan masuk dengan kunci ssh Anda
perhatikan bahwa ini tidak direkomendasikan karena masalah keamanan menurut pertanyaan ini di sini dan di sini
sumber
Saya harus memperbaiki gpg.program ke jalur absolut ke gpg:
Saya menggunakan Windows dengan cygwin.
sumber
choco install gpg4win
Larutan:
Sumber
sumber
Kesalahan ini juga dapat terjadi ketika kunci GPG Anda telah kedaluwarsa. Membuat kunci baru dan menambahkannya ke Git harus menyelesaikan ini.
sumber
Saya mengalami masalah ini setelah memutakhirkan ke gnupg 2.x. Akan terlihat bahwa gpg2 mereferensikan kunci secara berbeda: Saya masih punya
signingkey = ABC98F11
(gpg v1 setting) di~/.gitconfig
. Pengidentifikasi utama untuk gpg2 lebih panjang. Carilah merekagpg --list-secret-keys
sumber
Saya telah membuat
git
kunci dengan 3 kunci terpisah untukcertify
/sign
/encrypt
& kunci ditampilkan sebagai kedaluwarsa di masa mendatang (setelah bekerja dengan baik selama beberapa hari):membuat kunci baru tanpa menambahkan subkunci terpisah untuk menyelesaikan masalah.
sumber
Mungkin konfigurasi Git Anda disetel gpgsign = true . Coba setel ke false jika Anda tidak ingin menetapkan komitmen Anda. Buka folder repositori Anda dan ubah file
Dari ini...
Untuk ini...
sumber
Bagi saya kesalahan ini mulai terjadi
git tag -s
pada Debian GNU / Linux ketika saya beralih daripinentry-gnome3
kepinentry-curses
(menggunakanupdate-alternatives --config pinentry
) untuk akses jarak jauh yang lebih mudah. Ini hanya terjadi dengangit tag -s
, bukan dengangpg
(misgpg --clearsign
) itu sendiri.Satu-satunya perubahan yang diperlukan untuk membuatnya berfungsi kembali dalam hal ini adalah menambahkan
export GPG_TTY=$(tty)
ke file startup shell saya.Namun saya tidak mendapatkan pesan kesalahan "Ioctl untuk perangkat" yang tidak pantas yang disebutkan sebagai indikator untuk perbaikan ini di jawaban lain untuk pertanyaan ini.
Catatan: Karena penyebab untuk mendapatkan kesalahan ini sangat berbeda dari yang menyarankan
export GPG_TTY=$(tty)
sebelumnya (biasanya sebagai petunjuk tambahan) dalam jawaban lain untuk pertanyaan ini, saya memutuskan pertanyaan ini membutuhkan jawaban lain yang menyebutkan bahwaexport GPG_TTY=$(tty)
mungkin merupakan perbaikan utama dan satu-satunya hal yang diperlukan dalam beberapa kasus.sumber
update-alternatives --config pinentry
melakukannya untukku. Saya SSH akan masuk ke desktop saya danpinentry
disetel ke/usr/bin/pinentry-gnome3
(yang seharusnya memiliki fallback TTY ketika SSH masuk atau ketika beralih ke konsol virtual). Tapi ternyata itu tidak berhasil. Pengaturan default untuk/usr/bin/pinentry-tty
melakukan trik untuk saya. Saya mungkin harus mengaturnya kembali ketika saya kembali ke desktop saya, tetapi, untuk saat ini, saya baik-baik saja.export GPG_TTY=$(tty)
tidak cukup. Saya melakukannya tetapi harus beralihpinentry
sebelum saya bisa menandatangani komit saya.Apa yang dipecahkan untuk saya adalah memastikan nama kunci cocok dengan nama pengguna git saya. Saya menganggap email harus cocok juga. Ini mungkin ada hubungannya dengan saya menggunakan GPG KeyChain di Mac saya. Tidak yakin.
Saya pikir saya memberi nama kunci ketika saya mengisi ini, tapi saya kira itu meminta nama saya (git nama pengguna).
sumber
Saya memiliki kesalahan ini pada makro - untuk mencoba dan memecahkan masalah saya mencoba daftar kunci untuk melihat apakah mereka telah kadaluwarsa menggunakan
gpg2 --list-keys
- saya memverifikasi bahwa kunci belum kedaluwarsa dan bahwa kunci yang tepat telah diatur dalam konfigurasi saya menggunakangit config --global user.signingkey
.Setelah saya menjalankan perintah-perintah itu, saya tiba-tiba dapat melakukan commit yang ditandatangani lagi tanpa masalah. Saya tidak mengubah file atau kunci konfigurasi saya - Saya bahkan tidak membuat instance Terminal baru. Sepertinya gpg2 entah bagaimana berada dalam keadaan aneh di mac saya.
sumber
Saya memecahkan masalah menginstal
brew install gpg2
kemudian melakukangit config --global gpg.program gpg2
sumber
Kesalahan yang sama juga dapat disebabkan ketika Anda telah kedaluwarsa pada konfigurasi git Anda.
Silakan periksa konten
cat .git/config
dan carisigningkey
nilainya dan periksa apakah sudah kadaluarsa. Jika ya perbarui dengan yang baru.sumber
Jika Anda menggunakan smart card / yubikey untuk menyimpan kunci GPG Anda dan Anda mengatur
signkey
konfigurasi git dengan kunci yang disimpan dalam kartu (dan semua jawaban di atas tampaknya tidak menyelesaikan masalah Anda), PIN kartu yang diblokir mungkin adalah akar penyebab masalah ini.Untuk memeriksa PIN yang diblokir:
Jika penghitung mirip dengan
Kemudian PIN Anda diblokir (setelah 3 percobaan gagal).
Untuk membuka blokir PIN:
sumber
Bagi saya yang sederhana
brew unintstall gnupg && brew cask reinstall gpg-suite
menyelesaikan masalah.Mencopot pemasangan (dalam kasus saya) secara manual gpg homebrew-istalled dan menginstal ulang seluruh GPG Suite.
sumber
Dalam kasus saya, saya memiliki konfigurasi gpg campuran dan konfigurasi smimesign yang diberikan dalam dokumentasi penandatanganan komitmen di sini: https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing- kunci
Setelah mengerjakannya selama berjam-jam, saya menemukan cara terbaik untuk memperbaikinya adalah membatalkan semua yang terkait dengan gpg, dan mengkonfigurasi ulang gpg.
Seperti disebutkan dalam jawaban @Jason Thrasher, temukan semua konfigurasi git yang terkait dengan gpg menggunakan:
Kemudian hapus semua yang dapat dilakukan secara lokal dan lokal menggunakan:
Kemudian konfigurasi ulang mengikuti dokumentasi resmi yang diberikan di atas. Semoga ini membantu.
sumber
Jika Anda memasang pinentry dan pengaturan gpg sebelumnya, dan berhenti bekerja entah dari mana:
Periksa apakah gpg Anda berfungsi:
Jika dikatakan
gpg: signing failed: No pinentry
, mulai ulang klien daemon gpg, yang macet dari waktu ke waktu:Sekarang seharusnya sudah berfungsi:
sumber
Dalam kasus saya, kesalahan ini terjadi ketika berjalan
git commit
ditmux
jendela kecil yang tidak dapat masuk ke prompt frasa sandi.sumber
Ini akan membantu Anda untuk menyingkirkannya
git config commit.gpgsign false
sumber