git वितरित संस्करण नियंत्रण का उपयोग करते समय अनुक्रमण बनाना




build-process dvcs (7)

मर्कूरियल के साथ आप निम्न कमांड का उपयोग कर सकते हैं:

# get the parents id, the local revision number and the tags
[[email protected]:~/my-repo]$ hg id -nibt
03b6399bc32b+ 23716+ default tip

एचजी की पहचान देखें

अभी, हम संस्करण नियंत्रण के लिए Perforce का उपयोग कर रहे हैं। इसकी एक सख्ती से बढ़ती संख्या की सुविधा है जिसे हम बिल्ड के संदर्भ में उपयोग कर सकते हैं, जैसे "आप बगफिक्स प्राप्त करेंगे यदि आपका बिल्ड कम से कम 44902 है"।

मैं एक वितरित प्रणाली (शायद जीआईटी) का उपयोग करने के लिए स्विच करना चाहता हूं जिससे कि यह शाखा और घर से काम करना आसान हो। (दोनों जो पूर्णबल के साथ पूरी तरह से संभव हैं, लेकिन जीआईटी वर्कफ़्लो के पास कुछ फायदे हैं।) हालांकि, हालांकि "सहायक नदी विकास" वितरित किया जाएगा और एक सामान्य संशोधन अनुक्रमण का उल्लेख नहीं किया जाएगा, फिर भी हम एक मास्टर जीआईटी रेपो को बनाए रखेंगे जो सभी परिवर्तन निर्माण करने से पहले उसे खिलाने की ज़रूरत है

सख्ती से बढ़ रहे बिल्ड आईडी को संरक्षित करने का सबसे अच्छा तरीका क्या है? सबसे सरल तरीके से मैं सोच सकता हूं कि किसी प्रकार के पोस्ट-कट हुक है, जब मास्टर रिपो अपडेट हो जाता है, और यह नया पेड़ ऑब्जेक्ट (या ऑब्जेक्ट को पंजीकृत करता है) को पंजीकृत करता है? जीआईटी) एक केंद्रीकृत डेटाबेस के साथ जो आईड्स को बाहर निकालती है (मैं "डाटाबेस" कहता हूं, लेकिन मैं शायद इसे जीआईटी टैग के साथ कर दूँगा, और बस अगले उपलब्ध टैग नंबर या कुछ चीज़ों की खोज करूँगा। इसलिए "डेटाबेस" वास्तव में होगा। Git / refs / tags / build-id / )

यह व्यावहारिक है, लेकिन मैं सोच रहा हूं कि यह पूरा करने का एक आसान, या पहले से ही कार्यान्वित या मानक / "सर्वोत्तम अभ्यास" तरीका है।


आपको git describe जांच करना चाहिए यह एक अनोखी स्ट्रिंग देता है जो नवीनतम एनोटेट टैग के अनुसार वर्तमान शाखा (या कोई भी पारित आईडी) का वर्णन करता है, उस टैग के बाद की संख्या की गणना करता है और शाखा के प्रमुख का संक्षिप्त प्रतिबद्ध आईडी।

संभवत: आपके पास एक भी शाखा है जो आप नियंत्रित बिल्ड रिलीज़ को बंद करते हैं। इस मामले में मैं एक ज्ञात टैग प्रारूप के साथ एक शुरुआती प्रतिबद्धता को टैग करेगा और फिर ज्ञात टैग को वर्तमान HEAD के संबंध में वर्णन करने के लिए --match विकल्प के साथ git का वर्णन करें। आप फिर git के परिणाम का वर्णन कर सकते हैं या यदि आप वास्तव में केवल एक ही संख्या चाहते हैं तो आप टैग के बाहर संख्या काटने के लिए एक regex का उपयोग कर सकते हैं।

यह मानते हुए कि आप शाखा को कभी भी रिवाइंड नहीं करेंगे, निम्नलिखित कमिट की संख्या हमेशा शाखा के इतिहास में एक अनूठी बिंदु की पहचान करेगी।

उदा। (बाश या समान का उपयोग करना)

# make an annotated tag to an early build in the repository:
git tag -a build-origin "$some_old_commitid"

# describe the current HEAD against this tag and pull out a build number
expr "$(git describe --match build-origin)" : 'build-origin-\([0-9]*\)-g'

जैसा कि आप शायद जानते हैं, git एक हैश (एक संख्या) की गणना करता है जो विशिष्ट रूप से इतिहास के नोड की पहचान करता है इन का उपयोग करना, हालांकि वे कड़ाई से बढ़ नहीं रहे हैं, ऐसा लगता है कि यह काफी अच्छा होगा (इससे भी बेहतर, वे हमेशा स्रोत से मेल खाते हैं, इसलिए यदि आपके पास हैश है, तो आपके पास एक ही कोड है।) ये बहुत बड़ी संख्या हैं, लेकिन अधिकतर आप 6 या उससे अधिक प्रमुख अंकों के साथ प्राप्त कर सकते हैं।

उदाहरण के लिए,

यह बग 064f2ea पर तय किया गया था ...


git tag आवश्यकता के लिए पर्याप्त हो सकता है। एक टैग फ़ॉर्मेट चुनें, जिसे हर कोई सहमत होगा कि वह अन्यथा उपयोग नहीं करेगा।

नोट: जब आप स्थानीय तौर पर टैग करते हैं, तो एक git push सर्वर पर टैग अपडेट नहीं करेगा। इसके लिए git push --tags उपयोग करें


जब भी आपके पास एक सफल (या असफल) निर्माण होता है, तब मैं "लेबल" का उपयोग करता हूं, और आप इसे हमेशा के लिए निर्माण करने में सक्षम होंगे। यह काफी समान नहीं है, लेकिन यह उन बिल्ड नंबरों को प्रदान करता है, जबकि वितरित विकास के लाभ भी उपलब्ध कर रहा है।


मौजूदा कमेटी के अनुरूप संगत संख्या में बढ़ोतरी हो सकती है

git log --pretty=oneline | wc -l

जो एक भी नंबर देता है विशिष्ट संख्या जोड़ने के लिए आप उस नंबर पर वर्तमान शाए 1 को भी जोड़ सकते हैं।

यह दृष्टिकोण git describe से बेहतर है, क्योंकि इसमें आपको कोई भी टैग जोड़ने की आवश्यकता नहीं है, और यह स्वचालित रूप से विलीन हो जाती है

यह रीबिंग के साथ समस्या हो सकती है, लेकिन वैसे भी रिसाइबिंग "खतरनाक" ऑपरेशन है।


    git rev-list BRANCHNAME --count

यह बहुत कम संसाधन है जो गहन से अधिक है

    git log --pretty=oneline | wc -l




dvcs