क्या आप GPG पर हस्ताक्षर कर सकते हैं?


93

Git में अब साइन करने की क्षमता है git commit -S, जो महान है, लेकिन कभी-कभी मैं ध्वज को भूल जाता हूं commit, और कभी-कभी मैं अपने आप को उन पैच को मेल करता हूं am, जिनके साथ मैं आवेदन करता हूं , और उस आदेश पर हस्ताक्षर करने के लिए ध्वज नहीं है।

क्या पहले से रिकॉर्ड की गई कमिटमेंट में हस्ताक्षर जोड़ने का कोई तरीका है?


2
रिकॉर्ड के लिए, आप हमेशा कॉन्फ़िगरेशन के माध्यम से कमिट पर हस्ताक्षर करने के लिए बता सकते हैं git config commit.gpgsign true:।
निकोगा

@nicooga मैं चाहता हूं कि आपकी टिप्पणी में और अधिक वृद्धि थी इसलिए मैंने इस पर गौर किया। मुझे इस प्रश्न को कम से कम आधा दर्जन बार खींचना पड़ा है, और उस झंडे को स्थापित करने से मुझे समय का एक गुच्छा बचाना होगा।
माइकल ज़िलक

जवाबों:


78
  1. इंटरैक्टिव रिबेस मोड में जाएं।
  2. आप जिस पर हस्ताक्षर करना चाहते हैं, उसके बाद निम्न पंक्ति जोड़ें

    exec git commit --amend --no-edit -S

प्रत्येक कमेटी को चुनने के बाद यह कमांड चलेगी।

अपडेट करें:

ऐसा करने का आसान तरीका है:

git rebase --exec 'git commit --amend --no-edit -n -S' -i development

यह सब कुछ विकास (या किसी भी हैश) तक विद्रोह कर देता है और आपको हर कमिट के बाद पेस्ट करने की जरूरत नहीं है।


यह वही था जो मुझे चाहिए था जो वास्तव में थकाऊ स्थिति थी, धन्यवाद!
एमएसथ

2
ओह काश मुझे यह जल्दी मिल जाता। मैंने खुद गिठब से बहुत सारी बातें पढ़ीं, यह कहते हुए कि आप पुराने कमिट्स को इस्तीफा नहीं दे सकते। यह साबित होता है कि पूरी तरह से झूठ! मैं सैकड़ों आवागमन बचा सकता था, जिसे मैंने अब समाप्त कर दिया है। ओह ठीक है ... साझा करने के लिए धन्यवाद! मैंने इसमें से एक उर्फ ​​बनाया। resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"बन जाता हैgit resign HASH
BarryMode

2
यह सामान्य ज्ञान होना चाहिए! आपने मानवता के लिए एक बड़ी सेवा की है (कोई व्यंग्य नहीं!)।
२३:२५ बजे हॉपसेक्रे

3
वहाँ बिल्कुल कोई कारण नहीं है। जरा दौड़ो git commit --amend --no-edit -n -S
क्वॉलोनेल प्रश्न

9
क्या यह इतिहास नहीं बदलता है, एक की आवश्यकता है git push --force?
स्टीव

33

एक प्रतिबद्धता पर हस्ताक्षर करने से इसकी सामग्री बदल जाती है, इसलिए इसके आधार पर हाल ही में किए गए उनके हैश बदल जाएंगे।

यदि आप अभी हाल ही के सबसे कमिट पर हस्ताक्षर करना चाहते हैं, git commit -S --amendतो काम करेगा।


13

मैं उपयोग करता हूं git rebase -i --root( इतिहास को फिर से देख रहा हूं ) और इसमें परिवर्तन pickकरता हूं edit

फिर मैं प्रत्येक कमिट के लिए git commit -S --amend --no-edit && git rebase --continue (विंडोज पर) उपयोग करता हूं ।

यह प्रत्येक कमिट के लिए मैन्युअल रूप से संकेत है। मुझे उम्मीद है कि हम बेहतर समाधान पाएंगे।


मैं एक git रेपो (dotfiles के लिए) के रूप में अपने घर निर्देशिका है। कुछ कार्यक्रम अंतःक्रियात्मक रूप से इसके पुन: विकास के रूप में बदलाव उठाते हैं, इतिहास को दोबारा देखने के लिए मजेदार है। यह काफी धीमा है क्योंकि हस्ताक्षर धीमा है
अवींद्र गोलचरण

2

मैं भी उसी समस्या पर अड़ गया और यहाँ मेरा समाधान है:

git rebase -i --root --exec 'git commit --amend --no-edit --no-verify -S'

यह पहली प्रारंभिक प्रतिबद्ध से मेरी प्रतिबद्ध के सभी पर हस्ताक्षर करेंगे और यह भी हुक प्रतिबद्ध बाईपास कि मैं का उपयोग कर की स्थापना की कर्कशको बदलने की जरूरत नहीं हैpickedit


1

यदि आप केवल विशिष्ट कमानों को फ़िल्टर करना चाहते हैं और केवल उन्हीं पर हस्ताक्षर करें जिन्हें आप उपयोग कर सकते हैं filter-branch:

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "user@domain.com" ];
  then git commit-tree -S "$@";
  else git commit-tree "$@";
  fi' HEAD

यह उपयोगी है यदि, किसी कारण से, आप केवल अपने स्वयं के कमिट पर हस्ताक्षर करना चाहते हैं।


0

यदि आपको GPG पर हस्ताक्षर करने की आवश्यकता है, तो SINCE ने वर्तमान शाखा पर एक विशेष प्रतिबद्ध किया है, आप इसके बजाय निम्नलिखित का उपयोग कर सकते हैं:

git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD

<COMMIT>कमिट आईडी (उदा abc123e5) कहाँ है ।

इसका अतिरिक्त लाभ यह है कि यह प्रतिबद्ध मेटाडेटा (प्रतिबद्ध तिथि सहित) को परेशान नहीं करता है।

अगर आप भी हर कमिटमेंट पर अपने GPG पासफ़्रेज़ के लिए प्रेरित होना बंद करना चाहते हैं, तो यह उत्तर भी देखें: https://askubuntu.com/a/805550

नोट: GIT हस्ताक्षर gpgकरने के gpg2लिए से स्विच करने के लिए आपको GPG 2 में अपनी निजी कुंजी को फिर से आयात करना होगा।

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