git प्रतिबद्ध हस्ताक्षर विफल: गुप्त कुंजी उपलब्ध नहीं है


84

मुझे यह त्रुटि तब मिल रही है जब Git का उपयोग करने की कोशिश कर रहा हूं।

gpg: skipped "name <name@mail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

मैंने नीचे एक नई कुंजी उत्पन्न की है, लेकिन यह अभी भी वही त्रुटि देता है

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <name@mail.com>
sub   2048R/112A8C2D 2016-04-23

गुप्त कुंजी ऊपर के समान है

मैंने इसे जीआईटी टैगिंग के लिए एक जेपीजी कुंजी उत्पन्न किया है और चरणों का पालन किया है लेकिन यह अभी भी काम नहीं करता है, कोई विचार?


3
विंडोज उपयोगकर्ताओं के लिए, यह इस त्रुटि का सामना करने की अधिक संभावना है क्योंकि विंडोज पर Git सही gpg का उपयोग नहीं करता है। पीएटीएच में सही बाइनरी नहीं मिल रही है, जीआईटी ने अपने मिनीफाइड एमएसवाईएस के अंदर आंतरिक रूप से बंडल किए गए जीपीजी का उपयोग करने के लिए रिसॉर्ट किया है, जिसमें आपकी कुंजियों का कोई ज्ञान नहीं है। नीचे दिए गए कुछ उत्तरों में निर्दिष्ट gpg.program या G (NU) PGHOME वैरिएबल इसे सेट करेगा।
हाबिल चेउंग

जवाबों:


78

उपयोग करने से पहले आपको गुप्त कुंजी को कॉन्फ़िगर करना होगा।

git config user.signingkey 35F5FFB2

या इसे विश्व स्तर पर घोषित करें यदि आप प्रत्येक रिपॉजिटरी के लिए एक ही कुंजी का उपयोग करना चाहते हैं।

git config --global user.signingkey 35F5FFB2

स्रोत: गिट टूल्स - अपने काम पर हस्ताक्षर करना


बहुत बहुत धन्यवाद लियोनार्डो! यह काम करता हैं!! क्षमा करें यदि प्रश्न मूर्खतापूर्ण था, तो मुझे नहीं पता था कि इसे कैसे हल किया जाए।
एमिलियो मेनडेज़

अति उत्कृष्ट! उपयोगकर्ता की साइनिंग कुंजी को निर्दिष्ट करना भी एक कुंजी पर कई ईमेल पते रखने और git ईमेल और कुंजी पर पहले पते के बीच एक बेमेल होने के आसपास मिलेगा।
user2943160

1
क्या यह। Repconfig को सार्वजनिक रेपो में गुप्त कुंजी के साथ संग्रहीत करने के लिए सुरक्षित है?
melihovv

1
@melihovv ने रिकॉर्ड के बारे में पूछा: - गुप्त कुंजी आपके GPG कीरिंग पर होनी चाहिए। उस कुंजी की केवल हैश आईडी को कॉन्फिगर किया जाता है।
BRPocock

2
मुझे भी ऐसा करना था git config --global gpg.program gpg2
स्प्लकार्ट

108

यह मेरे लिए विंडोज 10 पर काम किया (ध्यान दें कि मैं gpg.exe के लिए निरपेक्ष पथ का उपयोग करता हूं):

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

यह वह त्रुटि थी जो मुझे ठीक करने से पहले मिली थी:

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

2
secret key not availableवीएस कोड के साथ इस त्रुटि को मिला और सेटिंग gpg.exeस्थान ने इसे हल किया।
दाविद ०

2
यह मेरे लिए भी काम किया। खासतौर पर जीथब से ही कॉन्फिगरिंग स्टेप्स फॉलो करने के बाद।
बास जी

1
हर बार जब मेरा विंडोज इनसाइडर इंस्टॉल करता है, तो यह विकल्प रीसेट हो जाता है। इसके लिए धन्यवाद :)
VRG

यह मेरे लिए काम किया है और साथ ही gpg के निरपेक्ष पथ को जोड़ने के बाद। बहुत बहुत धन्यवाद।
आदर्श श्रीवास्तव

64

मेरे लिए जो काम कर रहा था, वह जुड़ रहा था

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

अगर आप gpg2.exe का पूरा रास्ता खोजना चाहते हैं:

where gpg2.exe

3
GnuPG के स्थापित संस्करण के आधार पर, आपको gpg.exeइसके बजाय ऐसा करने की आवश्यकता है gpg2.exe
मार्क रोटटेवेल

14

मैं इन सभी उत्तरों को पूरा करने के लिए तैयार हूं, क्योंकि मुझे इसके साथ कई मुद्दे मिले हैं।

ये छूट --globalध्वज का उपयोग करती हैं , लेकिन यदि आप इन चीजों को स्थानीय स्तर पर करना चाहते हैं तो आप इसे हटा सकते हैं।

Git में गुप्त कुंजी कॉन्फ़िगर करें

git config --global user.signingkey 35F5FFB2

Git (वैकल्पिक) में विच gpg प्रोग्राम tu का उपयोग कॉन्फ़िगर करें

कुछ सिस्टम (उदाहरण के लिए Ubuntu) हो सकता है gpgऔर gpg2एक ही समय में। आपको यह निर्दिष्ट करने की आवश्यकता है कि आप उपयोग करेंगेgpg2

git config --global gpg.program gpg2

GPG_TTY निर्यात करें (वैकल्पिक)

यदि आप ssh वातावरण में इन कमांड का उपयोग करते हैं तो संभव है कि आपके पास निम्न त्रुटि हो: Inappropriate ioctl for deviceया gpg: échec de la signature : Ioctl() inapproprié pour un périphérique। इसके माध्यम से तय किया जा सकता है:

export GPG_TTY=$(tty)

ऑटो सक्षम GPG गायन (वैकल्पिक)

git config --global commit.gpgsign true

यदि आप अब इसका उपयोग नहीं करना चाहते हैं तो कोई इसे कैसे अक्षम कर सकता है?
मदोना सोंमबुआ

1
आप इसे अक्षम करने के लिए --unsetउन git configआदेशों पर ध्वज जोड़ सकते हैं
अल्फा

मैंने वास्तव में इस git config --global प्रतिबद्ध.gpgsign का उपयोग सही किया लेकिन गलत कहा।
मैडोना स्यम्बुआ

7

मेरे पास एक ऐसी स्थिति थी जिसमें विंडोज 10 मशीन में मेरे साथ भी ऐसा ही हो रहा था।

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

आज्ञाएँ "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGऔर gpg --list-secret-keys --keyid-format LONGजहाँ मुझे अलग-अलग परिणाम मिलते हैं!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

मुख्य कारण पिछले उत्तरों से संबंधित था लेकिन एक अलग अर्थ पर:

  • मैं GPG की git (कॉन्फ़िगर पथ) संस्करण का उपयोग करके gpg कुंजियाँ बना रहा था
  • Git को प्रतिबद्ध के लिए gpg के डाउनलोड किए गए संस्करण का उपयोग करने के लिए कॉन्फ़िगर किया गया था।
  • लगता है GPG कार्यान्वयन अपने स्वयं के प्रमाणपत्र डेटाबेस और भंडारण का उपयोग करते हैं।

मुझे उम्मीद है कि यह किसी को भी मदद कर सकता है जो इस संदेश पर ठोकर खाता है और पिछले उत्तर चिकित्सा मुद्दे को हल नहीं करते हैं।


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

5

आपको वैरिएबल सेट करना होगा GNUPGHOME। इसके बिना, GnuPG आपकी चाबियों को खोजने में सक्षम नहीं है।

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg

यूनिक्स पर इसे बस पथ में जोड़ना है।
विंडोज पर आपको कंट्रोल पैनल खोलना होगा और इसे सेट करना होगा

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg

1
मेरे लिए यह नहीं था GNUPGHOME। इसके साथ GPGHOMEमेरे लिए काम करता है
Sysix

1

मुझे इस पर समान समस्या थी कि .itconfig में git name और email store, प्रदान की गई gpg कुंजी से अलग थे । मैंने मैच के लिए उन्हें बदल दिया और यह काम करने लगा।


0

उपयोग करना "C:\Program Files\Git\usr\bin\gpg.exe"मेरे लिए समाधान था।
क्लियोपेट्रा की स्थापना रद्द करनी थी। इसके साथ, यह काम नहीं कर रहा था।

तो, संक्षेप;

  • क्लियोपेट्रा के लिए कोई ज़रूरत नहीं है, इसके बजाय जीआईटी डिफ़ॉल्ट का उपयोग करें।

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    

-4

शायद आपको अपने स्वयं के भंडार को क्लोन करने की आवश्यकता है जहां आपके पास अधिकार हैं। मेरे पास यह मुद्दा था जब मैंने किसी अन्य व्यक्ति के भंडार पर क्लोन किया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.