प्रारंभिक प्रतिबद्ध का संदर्भ कैसे दें?


131

मुझे एक स्क्रिप्ट मिली है, जिसे भंडार में प्रारंभिक प्रतिबद्ध को संदर्भित करने की आवश्यकता है। git का विशेष संदर्भ है HEAD, लेकिन इसके अनुरूप नहीं है TAIL। मुझे इसमें कुछ नहीं मिला, इससे git help rev-parseमुझे मदद मिलेगी।

यहाँ मैं क्या करना चाहता हूँ:

git show TAIL

यहाँ एक विकल्प मेरे पास है:

git show `git log --reverse | if read a commit ; then echo $commit ; fi`

यह बहुत हैकरी है और गिट लॉग के आउटपुट पर निर्भर करता है जो नहीं बदल रहा है।

अभी मैं सिर्फ शुरुआती कमिटमेंट को टैग करता हूं और इसे अपने रिफस्पेक के रूप में इस्तेमाल करता हूं। हालाँकि, मैं एक सामान्य उपकरण जारी करना चाहूंगा, इसलिए यह एक बढ़िया विकल्प नहीं है।

जवाबों:


151

स्क्रिप्टिंग के लिए गिट-लॉग का उपयोग न करें: या तो git-rev-list, या git-logनिर्दिष्ट कस्टम प्रारूप ( --format=*<sth>*विकल्प) के साथ उपयोग करें ।

आपके प्रश्न के साथ अतिरिक्त समस्या है: रिपॉजिटरी में एक से अधिक ऐसी TAIL रूट कमिट (पेरेंटलेस कमिट) मौजूद हो सकती हैं (भले ही हम डिस्कनेक्ट की गई शाखाओं, जैसे 'html', 'man' और 'todo' को git .git में छूट दें भंडार)। यह आम तौर पर एक में अलग-अलग परियोजनाओं में शामिल होने, या अलग-अलग विकसित उपप्रोजेक्ट के सबट्री मर्ज का उपयोग करने का परिणाम है।

उदाहरण के लिए git रिपॉजिटरी में 6 रूट कमिट्स हैं: git-gui, gitk (सबट्री-मर्ज), gitweb (अब अलग से विकसित नहीं किया गया), git मेल टूल (प्रोजेक्ट हिस्ट्री में बहुत जल्दी विलय, और p4-fast-export ( शायद आकस्मिक)। यह 'html और' मैन 'शाखाओं की जड़ों की गिनती नहीं कर रहा है, "सुविधा" शाखाएं जिनमें पूर्व-निर्मित दस्तावेज हैं, और TODO सूची और स्क्रिप्ट के साथ' टूडू 'शाखा है।


यदि आपके पास 1.7.4.2 या नया है, तो आप --max-parentsविकल्प का उपयोग कर सकते हैं :

$ git rev-list --max-parents=0 HEAD

अन्यथा, आप वर्तमान शाखा से सुलभ सभी पेरेंटलेस (रूट) की सूची प्राप्त कर सकते हैं:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

मेरे लिए, git rev-list HEAD | tail -n 1और git rev-list --max-parents=0 HEADमेरे लिए एक ही हैश मान वापस नहीं कर रहे हैं। एक का उपयोग --max-parents=0वास्तव में हालांकि प्रारंभिक प्रतिबद्ध हो रही है। बस मैंने सोचा था कि उत्तरार्द्ध अधिक विश्वसनीय लगता है।
jranranchaud

1
अगर आप विषम टाइमस्टैम्प के साथ काम करते हैं तो @ ट्रिबर्च यह हो सकता है। जोड़ने के --topo-orderलिए rev-listतय करना चाहिए कि, हालांकि मुझे लगता है कि --max=parents=0उत्तर सबसे अच्छा है।
jthill

35

git rev-list HEAD | tail -n 1 अधिक स्थिर विकल्प है।


14
यह एक पूंछ के आने पर लौटेगा ; एक से अधिक रूट (
पेरेंटलेस

इस जवाब ने पूरी तरह से काम किया और केवल एक प्रतिबद्ध शा को git rev-list --max-parents=0 HEADलौटाया जबकि 3 कमिट लौटे।
प्रोटोएवेंजेलियन

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