2009-11-24 13 views

उत्तर

15

आप .gitattributes फ़ाइल में ident द्वारा इस कार्यक्षमता के लिए एक पैटर्न जोड़कर ऐसा कर सकते हैं। यह $ आईडी के साथ $ आईडी $ को प्रतिस्थापित करेगा: < फ़ाइल के चेकआउट पर 40-अंक SHA> $। ध्यान दें कि यह आपको सीवीएस/एसवीएन में फ़ाइल की संशोधन संख्या नहीं देगा।

उदाहरण:

$ echo '*.txt ident' >> .gitattributes 
$ echo '$Id$' > test.txt 
$ git commit -a -m "test" 

$ rm test.txt 
$ git checkout -- test.txt 
$ cat test.txt 

लिंक gitattributes(5) Manual Page को

+3

मैंने अभी इसके साथ खेला है और जहां तक ​​मैं यह कह सकता हूं कि यह एक विशिष्ट फ़ाइल के लिए केवल एक SHA देता है, पूरे भंडार के लिए $ आईडी $ नहीं। – Aaron

+0

'% स्वरूप%' के बारे में क्या? –

37

सारांश: उत्पाद में संस्करण जानकारी एम्बेड करने का अनुशंसित तरीका है कि के लिए निर्माण प्रणाली उपयोग करने के लिए है, विवरण और वैकल्पिक दृष्टिकोण के लिए नीचे देखें।


Git में (और मैं एटॉमिक कमिट के साथ अन्य VCS प्रणालियों में आमतौर पर यह भी लगता है) एक एकल फाइल की संस्करण की तरह ऐसी कोई बात नहीं है।

Git समर्थन मांग पर $Id:$ कीवर्ड के विस्तार करता है, लेकिन:

  1. यह अनुरोध केवल पर किया जाता है। आपको निर्दिष्ट करना होगा (शायद ग्लोबबिंग पैटर्न का उपयोग करना) कि एक फ़ाइल (या फाइलों का एक सेट) identattribute सेट (पेड़ में '.gitattributes' फ़ाइल में, या स्थानीय भंडार सेटिंग्स के लिए '.git/info/विशेषता' में सेट है) ।
  2. यह फ़ाइल सामग्री के SHA-1 तक फैला है (या $Id:<sha-1 of blob>$ पर अधिक सटीक होना)। इस विकल्प का कारण यह है कि गिट उन फ़ाइलों को छूता नहीं है जो शाखा स्विचिंग या रीवाइंडिंग के दौरान नहीं बदले हैं; यदि '$ आईडी: $' संशोधन जानकारी में विस्तारित किया गया है तो उसे प्रत्येक संस्करण-नियंत्रित फ़ाइल को अपडेट करने की आवश्यकता होगी उदा। शाखाओं को स्विच करते समय।

Git जो जानकारी प्रतिबद्ध करने के लिए फैलता है $Format:...$ प्लेसहोल्डर के काफी एक विस्तृत सेट (जैसे $Format:%H$ एक हैश प्रतिबद्ध द्वारा बदल दिया है), लेकिन समर्थन करता है:

  1. विस्तार किया जाता है केवल जब git archive चल इसके उत्पादन में, फ़ाइल।
  2. यह अनुरोध पर पर किया गया है, export-subst विशेषता के माध्यम से नियंत्रित किया गया है।

संस्करण जानकारी एम्बेड करने की सिफारिश की जिस तरह से निर्माण प्रणाली (निर्माण के चरण में) के माध्यम से यह करने के लिए है, उदाहरण के लिए गिट Makefile और GIT-VERSION-GEN स्क्रिप्ट git.git रिपॉजिटरी के लिए गिट वेब इंटरफ़ेस में मेकफ़ाइल द्वारा उपयोग की जाने वाली स्क्रिप्ट देखें।

हालांकि आप (एबी) सीवीएस जैसे कीवर्ड विस्तार, चेकआउट पर कीवर्ड का विस्तार करने और भंडार में सामग्री दर्ज करने के लिए उन्हें साफ करने के लिए स्वच्छ/धुंध फ़िल्टर ड्राइवर (filter विशेषता के माध्यम से) का उपयोग कर सकते हैं।

+0

फ़िल्टर ड्राइवर वास्तव में बहुत अच्छा होगा अगर वास्तव में इसमें कोई शक्ति थी। पता है कि यह केवल पैरामीटर के रूप में फ़ाइल नाम प्राप्त करने लगता है, यह पहचान फ़िल्टर से भी कम है, एक पैरामीटर के रूप में BLOB SHA1 प्राप्त करना। यदि हम चालक कमांड लाइन को फ़िल्टर करने के लिए '$ प्रारूप: ... $ 'पास कर सकते हैं - जो इसे और बेहतर बना देगा। और इसे टेक्स्ट फ़ाइल वर्णसेट से शुरू करना चाहिए ... –

+0

एक फ़ाइल के संस्करण जैसी कोई चीज़ नहीं है, लेकिन किसी भी समय सभी फ़ाइलों की स्थिति जैसी कोई चीज है। वह राज्य एक हैश द्वारा दर्शाया गया है। –

+0

@ जॉर्जस्टॉकर: हाँ, सभी फ़ाइलों की स्थिति परियोजना के शीर्ष पेड़ ऑब्जेक्ट के SHA-1 हैश द्वारा प्रदर्शित की जा सकती है, लेकिन यह फ़ाइल सामग्री के यानी ब्लॉब ऑब्जेक्ट के SHA-1 हैश से कुछ अलग है। –

2

गिट की पहचान अन्य संस्करण प्रणालियों में $ आईडी $ क्या नहीं करती है। एक कड़वाहट के रूप में, आरसीएस का उपयोग गिट के साथ करें: व्यक्तिगत फ़ाइल संशोधन और गिट के लिए आरसीएस पूरी तरह से परियोजना को चेकपॉइंट करने के लिए। जैसा कि मैंने कहा, यह एक झुकाव है लेकिन यह थोड़े समझ में आता है (कभी-कभी कुछ चीजों के लिए)।

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