2009-06-17 16 views
92

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

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

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

यह सुंदर hacky है और Git लॉग के उत्पादन में बदलाव नहीं पर निर्भर करता है:

git show TAIL 

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

अभी मैं केवल प्रारंभिक प्रतिबद्धता टैग करता हूं और इसे अपने रेफस्पेक के रूप में उपयोग करता हूं। हालांकि, मैं एक सामान्य उपकरण जारी करना चाहता हूं, इसलिए यह एक अच्छा विकल्प नहीं है।

उत्तर

110

स्क्रिप्टिंग के लिए Git-लॉग ऑन का उपयोग न करें: या तो Git-राजस्व-सूची, या का उपयोग निर्दिष्ट कस्टम प्रारूप ("--format = <sth>" विकल्प) के साथ Git-लॉग इन करें।

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

उदाहरण के लिए गिट रिपोजिटरी में 6 रूट प्रतिबद्ध हैं: गिट-गुई, गिटक (सबट्री-विलय), गिटवेब (विलय, अब अलग से विकसित नहीं), गिट मेल टूल्स (प्रोजेक्ट इतिहास में बहुत जल्दी विलय), और पी 4- तेजी से निर्यात (शायद आकस्मिक)। यह 'एचटीएमएल और' मैन 'शाखाओं की जड़ों की गणना नहीं कर रहा है, "सुविधा" शाखाएं जिनमें प्री-जेनरेटेड दस्तावेज शामिल हैं, और TODO सूची और स्क्रिप्ट के साथ' todo 'शाखा है।


आप सभी parentless (रूट) की सूची प्राप्त कर सकते हैं का उपयोग कर मौजूदा शाखा से सुलभ करता है:

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

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

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

कोई पाइप नहीं, सभी जड़ें: 'गिट रेव-लिस्ट - मैक्स-माता-पिता = 0 HEAD' – wowest

+3

@ वाह: आईआईआरसी में कोई' -मैक्स-माता-पिता 'विकल्प नहीं था जब मैं यह जवाब लिख रहा था। अद्यतन के लिए Thansk! –

+0

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

21

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

+8

यह * एक * पूंछ के काम करता है; एक से अधिक रूट (पैरेंटलेस) प्रतिबद्ध हो सकते हैं –

संबंधित मुद्दे