Soru Git hatası - gpg verileri imzalayamadı


Git kullanmaya başladım ve git ve gpg'yi homebrew ile kurdum. Bazı nedenlerden dolayı, bu hatayı aldığımda git commit Bu konuyla ilgili diğer pek çok stackoverflow sorusuna baktım ve hiçbiri benim için işe yaramadı. Başarılı bir şekilde yükleyebilmemiz için bu hatayı nasıl düzeltebilirim?

error: gpg failed to sign the data
fatal: failed to write commit object

44
2017-12-09 03:17


Menşei


Mac kullanıcıları için. Bu sorunu yaşadım. Bu sayfadaki tavsiyeler bana gpg'nin iki sürümü yüklenebileceğimi ve benim yaptığımı fark ettim. Biri demlemek ve biri GPG Suite'den. GPG Suite'i kullanmak istedim, çünkü sistem anahtar zincirinde parola önbelleğe almayı sağlıyor. Demlemek versiyonunu kaldırmak sorunlarımı çözdü. @ Sideshowbark'ın gpg-agent'ı öldürme hakkındaki cevabı ile birlikte. Dolayısıyla, her birinin konfigürasyonlarının birbiriyle etkileşime girdiğine inanıyorum. - Michael Welch
Olası kopya gpg veriyi imzalamakta başarısız oldu: commit nesnesini yazamadı [Git 2.10.0] - SHi ON
Olası kopya stackoverflow.com/questions/41502146/... - Dr Beco


Cevaplar:


Sorun giderme için ilk önce denenecek iki şey:

  • koşmak git config --global gpg.program gpg2, emin olmak için kullanır gpg2 ve yok gpg
  • koşmak echo "test" | gpg2 --clearsign, emin olmak gpg2 kendisi çalışıyor

Her şey yolunda görünüyorsa, bir sonraki şey denemek için:

  • koşmak brew install pinentry Parola girişi için iyi bir araç yüklü olduğundan emin olmak için

Yüklemeden sonra yeniden denerseniz git commit ve hala "failed to sign the data" hata:

  • koşmak gpgconf --kill gpg-agent asılabilir çalışan herhangi bir ajan öldürmek için

Eğer diyorsa gpgconf yüklü değil veya sahip değil --kill seçenek, sen belki bunu dene:

  1. cp ~/.gnupg ~/.gnupg-GOOD bir kopyasını kaydetmek ~/.gnupg gerekirse daha sonra geri dönmek
  2. brew install gnupg21 GnuPG 2.1'i yüklemek için

Bir kopyanızı kaydetme nedeniniz ~/.gnupg dir, GnuPG 2.1'in GnuPG 2.0 ve önceki sürümleriyle geriye dönük olarak uyumlu olmayan bazı önemli verileri potansiyel olarak yaratması / değiştirmesidir. Eğer daha sonra geri dönmek istersin, yapabilirsin mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg.


Aksi halde, çalışan bir GnuPG ortamını kontrol etmek için çalıştırılacak bazı temel adımlar vardır:

  • koşmak gpg2 -K --keyid-format SHORT, en az bir anahtar çiftinizin olduğunu kontrol etmek için

Bunun çıktısı GnuPG'nin kullanacağı gizli bir anahtarın olmadığını gösterirse, o zaman bir tane oluşturmanız gerekir:

  • koşmak gpg2 --gen-keyGnuPG'nin bir anahtar çifti oluşturmaya yönelik adımlarda size yardımcı olması

Eğer bir hata mesajı alırsanız “Cihaz için uygun olmayan ioctl”, Bunu yap:

  • koşmak export GPG_TTY=$(tty) ve / veya buna ekleyin ~/.bashrc veya ˜/.bash_profile 

64
2017-12-09 06:06



İkinci komutu çalıştırdığımda bu hatayı alıyorum: gpg: varsayılan gizli anahtar yok: Hiçbir gizli anahtar gpg: [stdin]: clearsign başarısız oldu: Gizli anahtar yok - Entitize
@Entitize Bu gpg'yi işaret ediyor gibi görünüyor, imzalamak için kullanmak için herhangi bir anahtarınız olduğunu düşünmüyor. Yanıta eklediğim ek adımları görün; eğer hiç kaçamazsan gpg2 --gen-key önce, önce yapman gereken şey bu. - sideshowbarker
echo çalıştırdığımda "test" | gpg2 --clearsign, bana verir: gpg-agent [-]: komut get_passphrase başarısız oldu: Cihaz için uygun olmayan ioctl gpg: aracı ile ilgili sorun: Cihaz için uygun olmayan ioctl gpg: varsayılan gizli anahtar yok: Operasyon iptal edildi gpg: [stdin]: Clearsign başarısız oldu: İşlem iptal edildi. Başka birçok olasılık denedim, ama işe yaramadı. GPG kullanmadan GIT kullanmanın bir yolu var mı? - Entitize
Deneyebilirsin export GPG_TTY=$(tty). Git'i gpg olmadan kullanmanın bir yolu varsa, bunu varsayılan olarak ya da sadece koşarak yapabilmelisiniz. git config --global commit.gpgsign false taahhütlerinizi gpg imzalamayı global olarak unsetmek için. - sideshowbarker
Mac OS X'te, hata ayıklamaya başladım. echo "test" | gpg2 --clearsign, bir hata buldu ve bana yol açıyor bu konuSorunumu çözen: Ben sadece export GPG_TTY=$(tty) Benimkine ˜/.bash_profile dosya ve daha sonra yeniden yükle source ˜/.bash_profile - sirboderafael


Git, hangi anahtarın imzalandığını bilmelidir.

GPG, gpg-agent ve gpg.conf dosyalarınızı kurduktan sonra (bkz. bu rehber), koşmanız gerekir

git config --global user.signingkey EB11C755

Açıkçası, genel anahtarı kendi başınıza değiştirin. Her bir taahhütün varsayılan olarak imzalanmasını istiyorsanız

git config --global commit.gpgsign true

23
2018-03-22 03:38



Daha önce yaptığım şeyi yapmak için aptalca bir şey yapması durumunda buna koştum: "signinkey" değil "signingkey" yazdığınızdan emin olun. - ZNK
Benim için tamir edildi! Çok teşekkürler. - starkej2


Her nasılsa, git her GPG imzalamak için yapılandırılmış. GPG ile oturum açmak için git komutunu kullanmanız veya göndermeniz gerekmez. Gpg imzalama mekanizmanız henüz yapılandırılmadığı için hata veriyordur.

Gitmek için yeniyseniz, önce GPG imzalamadan önce çalışmayı deneyin, ardından gerçekten ihtiyacınız varsa daha sonra oturum açmayı ekleyin.

Git'in, şunları yaparak gpg'ye göre nasıl yapılandırıldığını doğrulayabilirsiniz:

git config -l | grep gpg

Aşağıdakiler dahil sıfır veya daha fazla satır oluşturabilir:

commit.gpgsign=true

"Commit.gpgsign" öğesi true ise, o zaman gpg imzasını etkinleştirdiniz. İle devre dışı bırakın:

git config --global --unset commit.gpgsign

Ardından işleminizi tekrar başlatmayı deneyin. Şimdi gpg imzalamadan çalıştırılmalıdır. Temel git çalışmasını aldıktan sonra, karışıma gpg imzalamayı eklemeyi denemelisiniz.


17
2018-02-27 00:23



Korku veren! git config --global --unset commit.gpgsign benim için çalıştı :) - HPM


@Sideshowbarker ve @ Xavier Ho çözümüne bakın, problemimi takip eden adımlarla çözdüm.

Demlemek tarafından gpg2 kurulu olduğunu varsayalım.

git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key

gpg2 -K --keyid-format SHORT 

... /. Gnupg / pubring.gpg

sn rsa2048 /0A61C6FC 2017-06-29 [SC] [geçerlilik süresi: 2019-06-29]

git config --global user.signingkey 0A61C6FC

Meslektaşım tarafından hatırlatılmış, eklemeliyim

export GPG_TTY=$(tty)

~ / .zshrc için eğer zsh kullanıyorsanız, ~ / .bash_profile dosyasına ekleyin.


MacOS için,

gpg2 gpg'de gpg ile birleştirilir ve gpg komutu gpg2'ye işaret edilir

brew install gpg2

demlemek bilgi gpg

gnupg: kararlı 2.2.6 (şişelenmiş)

git config --global gpg.program gpg
gpg -K --keyid-format SHORT 

ve passphrase girişi için pinentry-mac var

brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf

Çizgi ekle

Pinentry programı / usr / yerel / bin / pinentry-mac


13
2018-06-29 17:34



export GPG_TTY=$(tty) benim için çalıştı teşekkürler! - Ryan Currah


Git yapılandırma ayarlanmış olabilir gpgsign = true. Eğer taahhütlerinizi asmak istemiyorsanız onu yanlış yapmaya çalışın. Havuz klasörüne git ve dosyayı değiştir

nano .git / config

Bundan...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

Buna...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false

2
2017-07-13 21:54





Gnupg 2.x'e yükselttikten sonra bu sorunu yaşadım. Gpg2'nin anahtarlara farklı şekilde başvurduğunu görecektim: signingkey = ABC98F11 (gpg v1 ayarı) ~/.gitconfig. Gpg2 için anahtar tanımlayıcılar daha uzundur. Onlara bak gpg --list-secret-keys


2
2017-10-11 08:54





Bu ondan kurtulmanıza yardımcı olacak

git config commit.gpgsign false


1
2017-07-12 10:51





Ben yapmıştım git 3 ayrı tuşla anahtar certify / sign / encrypt & anahtar gelecekte (bir kaç gün için iyi çalıştıktan sonra) süresi dolduğunu gösterdi:

pub   rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
      Key fingerprint = 4670 59C1 7592 08B8 7FA5  313B 2A42 B6A6 4CD1 E9DA
uid         [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub   rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub   rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub   rsa2048/A3913A3C 2017-04-28 [] [expired: never     ]

Sorunu çözmek için ayrı alt anahtarlar eklemeden yeni bir anahtar yaptı.


0
2018-04-28 22:56





Anahtarınızın kullanım süresinin dolduğunu kontrol edin. Son kullanma tarihini düzelttikten sonra (istemediğiniz sürece yeni bir anahtar oluşturmanıza gerek yoktur), git normal olarak çalışacak.

Süresi dolmuş anahtarı düzeltmenin bir yolu:

(Not: $ komut satırı istemini gösterir, komut istemini yazdıktan sonra komutları yazın; Her komuttan sonra Enter tuşuna basın)

$ gpg2 --list-keys uygun anahtar kimliğini bulmak için \ üzerinde pub hat)

$ gpg2 --edit-key <key id> - Bu, gpg kabuğunu açar gpg>

gpg> expire - birincil anahtar için yeni son kullanma tarihi belirlemek için talimatları izleyin

Sonra, süresi dolmuş alt anahtarlar varsa (sub satırda gösterir), son kullanma tarihlerini de sıfırlar:

gpg> key 1 - ilk alt anahtarı seçer gpg> expire - alt anahtar için yeni son kullanma tarihi belirlemek için talimatları izleyin

Gerekirse, sonraki her alt anahtar için tekrarlayın.


0
2018-05-02 01:03





Bu hata, GPG anahtarınızın süresi dolduğunda da oluşabilir. Yeni bir anahtar oluşturmak ve onu Git'e eklemek bunu çözmelidir.


0
2018-05-04 04:34





Benim için bu hata oluşmaya başladı git tag -s Ben geçiş yaparken Debian GNU / Linux üzerinde pinentry-gnome3 için pinentry-curses (kullanarak update-alternatives --config pinentryDaha kolay uzaktan erişim için). Sadece ile meydana geldi git tag -sdeğil gpg (Örneğin. gpg --clearsign) kendisi.

Bu durumda tekrar çalışmaya başlamak için gereken tek değişiklik, export GPG_TTY=$(tty) benim kabuk başlangıç ​​dosyalarına.

Yine de bu sorunun bir başka cevabında, bu düzeltmenin göstergesi olarak belirtilen “Cihaz için uygunsuz ioctl” hata mesajını almadım.

Not: Bu hatayı almanın sebebi, önerilenlere göre tamamen farklıydı. export GPG_TTY=$(tty) Bu soruya verilen diğer cevaplarda (genellikle bir yan ipucu olarak), bu sorunun başka bir cevaba ihtiyacı olduğuna karar verdim. export GPG_TTY=$(tty) Bazı durumlarda gerekli olan temel düzeltme ve tek şey olabilir.


0
2018-03-23 09:36