सवाल गिट त्रुटि - जीजीपी डेटा पर हस्ताक्षर करने में विफल रहा


मैंने अभी गिट का उपयोग शुरू किया और मैं होमब्री के माध्यम से गिट और जीजीपी स्थापित करता हूं। किसी कारण से, जब मैं करता हूं तो मुझे यह त्रुटि मिलती है git commit मैंने इस विषय के बारे में कई अन्य स्टैक ओवरफ्लो प्रश्नों को देखा और उनमें से कोई भी मेरे लिए काम नहीं करता था। मैं इस त्रुटि को कैसे ठीक कर सकता हूं ताकि मैं सफलतापूर्वक अपलोड कर सकूं।

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

44
2017-12-09 03:17


मूल


मैक उपयोगकर्ताओं के लिए। मुझे यह मुद्दा था। इस पृष्ठ पर सलाह ने मुझे एहसास करने में मदद की कि मेरे पास जीपीजी के दो संस्करण स्थापित हो सकते हैं और मैंने किया। ब्रू से एक और जीपीजी सूट से एक। मैं जीपीजी सुइट का उपयोग करना चाहता था क्योंकि यह सिस्टम कीचेन में पासफ्रेज कैशिंग के लिए अनुमति देता है। ब्रू संस्करण को अनइंस्टॉल करने से मेरे मुद्दों का समाधान हुआ। जीजीपी एजेंट को मारने के बारे में @ sideshowbarker के जवाब के साथ। तो मुझे लगता है कि प्रत्येक की कॉन्फ़िगरेशन एक दूसरे के साथ हस्तक्षेप कर रहे थे। - Michael Welch
के संभावित डुप्लिकेट gpg डेटा घातक पर हस्ताक्षर करने में विफल रहा: प्रतिबद्ध वस्तु लिखने में विफल [गिट 2.10.0] - SHi ON
के संभावित डुप्लिकेट stackoverflow.com/questions/41502146/... - Dr Beco


जवाब:


समस्या निवारण के लिए, दो चीजें पहले कोशिश करें:

  • रन git config --global gpg.program gpg2, यह सुनिश्चित करने के लिए कि गिट का उपयोग करता है gpg2 और नहीं gpg
  • रन echo "test" | gpg2 --clearsign, सुनिश्चित करना gpg2 खुद काम कर रहा है

यदि यह सब ठीक दिखता है, तो कोशिश करने के लिए एक अगली चीज़:

  • रन brew install pinentry यह सुनिश्चित करने के लिए कि पासफ्रेज़ प्रविष्टि के लिए आपके पास एक अच्छा टूल इंस्टॉल है

अगर उस इंस्टॉलेशन के बाद और आप पुनः प्रयास करें git commit और अभी भी "failed to sign the data"त्रुटि:

  • रन gpgconf --kill gpg-agent लटकाया जा सकता है कि किसी भी चल रहे एजेंट को मारने के लिए

अगर वह कहता है gpgconf स्थापित नहीं है या नहीं है --kill विकल्प, आप पराक्रम इसे इस्तेमाल करे:

  1. cp ~/.gnupg ~/.gnupg-GOOD आपकी एक प्रति सहेजने के लिए ~/.gnupg यदि आवश्यक हो तो बाद में वापस लौटने के लिए
  2. brew install gnupg21 जीएनयूपीजी 2.1 स्थापित करने के लिए

आपकी एक प्रति सहेजने का कारण ~/.gnupg डीआईआर यह है कि जीएनयूपीजी 2.1 संभावित रूप से कुछ महत्वपूर्ण डेटा को बनाता / बदलता है जो जीएनयूपीजी 2.0 और उससे पहले के पीछे पिछड़ा नहीं है, इसलिए अगर आप बाद में वापस जाना चाहते हैं, आप कर सकते हैं mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg


अन्यथा यह जांचने के लिए कुछ बुनियादी कदम हैं कि आप एक काम कर रहे जीएनयूपीजी पर्यावरण प्राप्त कर चुके हैं:

  • रन gpg2 -K --keyid-format SHORT, यह जांचने के लिए कि आपके पास कम से कम एक कुंजी जोड़ी है

यदि उस के आउटपुट से पता चलता है कि आपके पास जीएनयूपीजी का उपयोग करने के लिए कोई गुप्त कुंजी नहीं है, तो आपको एक बनाना होगा:

  • रन gpg2 --gen-key, जीएनयूजीजी आपको एक महत्वपूर्ण जोड़ी बनाने के लिए चरणों के माध्यम से चलने के लिए है

अगर आपको एक त्रुटि संदेश कह रहा है "डिवाइस के लिए अनुचित ioctl", यह करो:

  • रन export GPG_TTY=$(tty) और / या इसे अपने आप में जोड़ें ~/.bashrc या ˜/.bash_profile 

64
2017-12-09 06:06



जब मैं दूसरा आदेश चलाता हूं तो मुझे यह त्रुटि मिलती है: gpg: कोई डिफ़ॉल्ट गुप्त कुंजी नहीं: कोई गुप्त कुंजी gpg: [stdin]: clearsign विफल: कोई गुप्त कुंजी नहीं - Entitize
@Entitize ऐसा लगता है कि जीपीजी इंगित नहीं करता है कि आपके पास हस्ताक्षर करने के लिए उपयोग करने के लिए कोई कुंजी है। उत्तर में जोड़े गए अतिरिक्त चरणों को देखें; यदि आपने कभी नहीं चलाया है gpg2 --gen-key इससे पहले, आपको पहले ऐसा करने की ज़रूरत है। - sideshowbarker
जब मैं echo "test" चलाता हूं gpg2 --clearsign, यह मुझे देता है: gpg-agent [-]: कमांड get_passphrase विफल: डिवाइस gpg के लिए अनुचित ioctl: एजेंट के साथ समस्या: डिवाइस के लिए अनुचित ioctl gpg: कोई डिफ़ॉल्ट गुप्त कुंजी नहीं: ऑपरेशन रद्द gpg: [stdin]: समाशोधन विफल: ऑपरेशन रद्द कर दिया गया। मैंने कई अन्य संभावनाओं की कोशिश की है, लेकिन कोई काम नहीं है। जीपीजी के बिना जीआईटी का उपयोग करने का कोई तरीका है! - Entitize
आप कोशिश कर सकते हैं export GPG_TTY=$(tty)। जहां तक ​​gpg के बिना गिट का उपयोग करने का कोई तरीका है, तो आप डिफ़ॉल्ट रूप से ऐसा करने में सक्षम होना चाहिए या अन्यथा बस चलकर git config --global commit.gpgsign false वैश्विक स्तर पर अपने कामों के जीजीपी हस्ताक्षर को अनसेट करने के लिए। - sideshowbarker
मैक ओएस एक्स में, मैंने डीबग करना शुरू कर दिया echo "test" | gpg2 --clearsign, एक त्रुटि मिली और यह मुझे ले जाता है यह धागा, जिसने मेरी समस्या हल की: मैंने बस एक डाल दिया export GPG_TTY=$(tty) मेरे अंदर ˜/.bash_profileफ़ाइल और उसके साथ फिर से लोड किया गया source ˜/.bash_profile - sirboderafael


गिट को यह जानने की जरूरत है कि यह किस कुंजी पर हस्ताक्षर कर रहा है।

आपके द्वारा GPG, gpg-agent, और your gpg.conf फ़ाइलों को सेट करने के बाद (देखें यह गाइड), आपको चलाने की जरूरत है

git config --global user.signingkey EB11C755

जाहिर है, अंत में सार्वजनिक कुंजी को अपने साथ बदलें। यदि आप डिफ़ॉल्ट रूप से प्रत्येक प्रतिबद्धता पर हस्ताक्षर करना चाहते हैं, तो उपयोग करें

git config --global commit.gpgsign true

23
2018-03-22 03:38



मैं बस इस में भाग गया अगर किसी और ने जो किया वह करने के लिए पर्याप्त मूर्ख था: सुनिश्चित करें कि आप इसे "हस्ताक्षरकर्ता" का जादू करते हैं और "साइनइन्की" नहीं करते हैं। - ZNK
मेरे लिए इसे फिक्स्ड! बहुत बहुत धन्यवाद। - starkej2


किसी भी तरह आपका गिट जीपीजी को प्रत्येक प्रतिबद्धता पर हस्ताक्षर करने के लिए कॉन्फ़िगर किया गया है। जीपीजी के साथ हस्ताक्षर करने के लिए गिट का उपयोग करके प्रतिबद्ध या धक्का देना आवश्यक नहीं है। यह संभवतः त्रुटि दे रहा है क्योंकि आपका जीपीजी हस्ताक्षर तंत्र अभी तक कॉन्फ़िगर नहीं है।

यदि आप गिट करने के लिए नए हैं, तो पहले इसे जीपीजी साइनिंग के बिना पहले काम करने का प्रयास करें, फिर अगर आपको वास्तव में इसकी ज़रूरत है तो बाद में साइन इन करें।

आप यह कर सकते हैं कि जीजीपी के संबंध में आपका गिट कैसे कॉन्फ़िगर किया गया है:

git config -l | grep gpg

जो शून्य या अधिक लाइनों का उत्पादन कर सकता है, जिनमें निम्न शामिल हैं:

commit.gpgsign=true

यदि "commit.gpgsign" सत्य है, तो आपके पास gpg हस्ताक्षर सक्षम है। इसके साथ अक्षम करें:

git config --global --unset commit.gpgsign

फिर फिर से अपनी प्रतिबद्धता चलाने की कोशिश करें। इसे अब जीजीपी हस्ताक्षर किए बिना चलाया जाना चाहिए। मूल गिट काम करने के बाद, आपको मिश्रण में वापस gpg हस्ताक्षर जोड़ने का प्रयास करना चाहिए।


17
2018-02-27 00:23



बहुत बढ़िया! git config --global --unset commit.gpgsign मेरे लिए काम किया :) - HPM


@Sideshowbarker और @Xavier हो समाधान का संदर्भ लें, मैंने निम्नलिखित चरणों के माध्यम से अपनी समस्या हल की।

ब्रू द्वारा स्थापित gpg2 मानें,

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

सेक आरएसए 2048 /0A61C6FC 2017-06-29 [एससी] [कालबाह्य: 201 9-06-29]

git config --global user.signingkey 0A61C6FC

मेरे सहयोगी द्वारा याद दिलाया गया, संलग्न करने की जरूरत है

export GPG_TTY=$(tty)

zsh का उपयोग करते हुए ~ / .zshrc करने के लिए, अन्यथा ~ / .bash_profile में संलग्न करें


मैकोज़ के लिए,

gpg2 को gw में gpg के साथ जोड़ा गया है और इसलिए gpg कमांड gpg2 को इंगित किया गया है

brew install gpg2

ब्रू जानकारी जीपीजी

gnupg: स्थिर 2.2.6 (बोतलबंद)

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

और पासफ्रेज़ प्रविष्टि के लिए पेंशनरी-मैक है

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

लाइन जोड़ें

पेंशनरी-प्रोग्राम / यूएसआर / स्थानीय / बिन / पेंशनरी-मैक


13
2018-06-29 17:34



export GPG_TTY=$(tty) मेरे लिए काम किया धन्यवाद! - Ryan Currah


हो सकता है कि आपका गिट कॉन्फ़िगरेशन सेट हो gpgsign = सच। यदि आप अपने कामों को एग्ग्न नहीं करना चाहते हैं तो इसे गलत पर सेट करने का प्रयास करें। अपने भंडार फ़ोल्डर पर जाएं और फ़ाइल को बदलें

नैनो .git / config

इस से...

[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

इसके लिए...

[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 में अपग्रेड करने के बाद इस समस्या का अनुभव हुआ। यह देखा जाएगा कि gpg2 अलग-अलग कुंजी का संदर्भ दे रहा है: मुझे अभी भी था signingkey = ABC98F11 (जीपीजी v1 सेटिंग) मेरे में ~/.gitconfig। Gpg2 के लिए मुख्य पहचानकर्ता लंबे समय तक हैं। उन्हें देखो gpg --list-secret-keys


2
2017-10-11 08:54





यह आपको इससे छुटकारा पाने में मदद करेगा

git config commit.gpgsign false


1
2017-07-12 10:51





मैंने एक बनाया था git के लिए 3 अलग कुंजी के साथ कुंजी certify / sign / encrypt और कुंजी भविष्य में समाप्त होने के रूप में दिखाया गया है (कुछ दिनों के लिए ठीक काम करने के बाद):

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     ]

समस्या को हल करने के लिए अलग उपकुंजी जोड़ने के बिना एक नई कुंजी बनाई।


0
2018-04-28 22:56