Git Rev-parse क्या करता है?


282

क्या करता git rev-parseहै?

मैंने मैन पेज पढ़ा है लेकिन इसने जवाबों से ज्यादा सवाल उठाए हैं। इस तरह की चीजें:

बाहर उठाओ और मापदंडों की मालिश करें

मालिश ? इसका क्या मतलब है?

मैं संशोधन विनिर्देशकों के एक रिवाल्वर (SHA1) के रूप में उपयोग कर रहा हूं, जैसे

git rev-parse HEAD^

या

git rev-parse origin/master

क्या यह कमांड का उद्देश्य है? यदि नहीं, तो इसे प्राप्त करने के लिए इसका उपयोग करना भी सही है?


3
जहां तक ​​मैं आदमी पृष्ठ में देख सकता हूं, यह अन्य आदेशों के लिए संशोधन / ऑब्जेक्ट नामों को पार्स करने के लिए एक ज्यादातर आंतरिक उपयोगिता है। आप जो कर रहे हैं वह बहुत ज्यादा rev-parseकमांड का उद्देश्य है । आप कमांड लाइन को सामान्य करने के लिए भी इसका उपयोग कर सकते हैं, ताकि वास्तविक प्रोग्राम को जटिल ऑब्जेक्ट नेम के सिंटैक्स को समझना न पड़े (आप git rev-parseकमांड लाइन में कुछ मापदंडों से पहले, परिवर्तन या "मसाज" करने के लिए उपयोग करेंगे) वास्तविक कार्यक्रम कहा जाता है)।

यह भी देखें github.com/git/git/commit/…
VONC

60
के लिए वह आदमी पृष्ठ git rev-parseहँसने योग्य नहीं है। मुझे आश्चर्य है कि 5 वर्षों के बाद भी किसी ने उस शब्दजाल को किसी मानव पठनीय में फिर से लिखने की जहमत नहीं उठाई।
Not2qubit

@ not2qubit Me: 'स्पष्ट करने के लिए धन्यवाद, मैं हीन महसूस कर रहा था।' लिनुस टॉर्वाल्ड्स: 'मैंने इसे फिर से पढ़ा, वास्तव में आपने किस हिस्से को नहीं समझा?'
ब्रेन 2

जवाबों:


245

git rev-parseएक सहायक plumbingआदेश है जिसका उपयोग मुख्य रूप से हेरफेर के लिए किया जाता है।

इसका एक सामान्य उपयोग git rev-parseSHA1 हैश को एक संशोधन निर्दिष्ट करने के लिए प्रिंट करना है। इसके अलावा, इस आउटपुट को प्रारूपित करने के लिए कई विकल्प हैं जैसे कि --shortएक छोटे से अद्वितीय SHA1 को प्रिंट करने के लिए।

अन्य उपयोग के मामले भी हैं (लिपियों में और शीर्ष पर निर्मित अन्य उपकरण) जिनका मैंने उपयोग किया है:

  • --verify यह सत्यापित करने के लिए कि निर्दिष्ट ऑब्जेक्ट एक मान्य गिट ऑब्जेक्ट है।
  • --git-dir.gitनिर्देशिका के एब्स / सापेक्ष पथ को प्रदर्शित करने के लिए ।
  • यदि आप वर्तमान में किसी रिपोजिटरी का उपयोग कर --is-inside-git-dirया वर्क-ट्री के भीतर उपयोग कर रहे हैं, तो यह देखना--is-inside-work-tree
  • रेपो एक नंगे का उपयोग कर जाँच कर रहा है --is-bare-repository
  • SHA1 शाखाओं की छपाई ( --branches), टैग ( --tags) और रेफरी को रिमोट के आधार पर फ़िल्टर किया जा सकता है (उपयोग करके --remote)
  • --parse-optएक स्क्रिप्ट (तरह तरह के getopt) में तर्क को सामान्य करने और एक आउटपुट स्ट्रिंग प्रिंट करने के लिए जिसका उपयोग किया जा सकता हैeval

Massageतात्पर्य यह है कि जानकारी को एक रूप से दूसरे रूप में परिवर्तित करना संभव है अर्थात रूपांतरण कमांड। ये कुछ त्वरित उदाहरण हैं जिनके बारे में मैं सोच सकता हूं:

  • कमेटी के SHA1 में एक शाखा या टैग का नाम, जो इस ओर इशारा करता है कि इसे एक प्लंबिंग कमांड को पास किया जा सकता है जो केवल कमिटमेंट के लिए SHA1 मान स्वीकार करता है।
  • A..Bके रूप में git logया git diffअंतर्निहित पाइपलाइन कमांड के लिए समकक्ष तर्कों में एक संशोधन रेंजB ^A

102

कमांड नाम की व्युत्पत्ति पर विस्तार से बताने के लिए rev-parse, Git लगातार revप्लंबिंग कमांड में "रिविजन" के लिए संक्षिप्त रूप से शब्द का उपयोग करता है और आम तौर पर कमिटमेंट के लिए 40-कैरेक्टर SHA1 हैश का अर्थ रखता है। rev-listउदाहरण के लिए कमांड एक शाखा या जो भी हो, के लिए 40-char प्रतिबद्ध हैश की सूची प्रिंट करता है।

इस मामले में नाम का विस्तार किया जा सकता है parse-a-commitish-to-a-full-SHA1-hash। जबकि आदेश में टक्सड्यूड के उत्तर में उल्लिखित कई सहायक कार्य हैं, इसका नाम उपयोगकर्ता के अनुकूल संदर्भ को शाखा नाम या संक्षिप्त रूप में हैश में उपयोग करने के लिए प्रकट होता है जैसा कि 40-चरित्र SHA1.h में कई प्रोग्रामिंग / प्लंबिंग के लिए सबसे उपयोगी है प्रयोजनों।

मुझे पता है कि मैं सोच रहा था कि यह "रिवर्स-पार्स" कुछ समय के लिए है, इससे पहले कि मैं इसे समझ पाया और मुझे "मालिश" और "हेरफेर" की शर्तों को समझने में समान परेशानी हुई :)

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


9
स्पष्टीकरण के लिए धन्यवाद, मुझे समझ में नहीं आया कि डॉक्स-
याकूब मैके

क्या आप हमें एक उदाहरण दे सकते हैं messagingऔर manipulationजैसा कि आपने पहले किया था?
बो चेन

5
दूसरे शब्दों में, के git rev-parseलिए कम है git revision-parse। यह दिए गए इनपुट को लेता है और संबंधित 40-वर्ण संशोधन आईडी देता है।
जोनाथन बेन

36

git rev-parseइसके अलावा का उपयोग कर मौजूदा शाखा का नाम प्राप्त करने के लिए काम करता है --abbrev-रेफरी की तरह झंडा:

git rev-parse --abbrev-ref HEAD

क्या इस तरह से एक प्रतिबद्ध संदेश प्राप्त करना संभव है?
सिंह Droidcoder

2
@LeoDroidcoder कोशिश करेंgit log --format=%B -n 1 <revision>
हिपहॉप 1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.