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




build-process dvcs (6)

आपको 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'

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

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

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

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


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


मैं git describe का उपयोग करने का सुझाव दूसरा git describe हूं। बशर्ते आप एक समझदार संस्करण नीति है, और आप अपने भंडार के साथ किसी भी पागल सामान नहीं करते, git describe हमेशा monotonic होगा (कम से कम के रूप में monotonic के रूप में आप कर सकते हैं, जब आपके संशोधन का इतिहास एक पेड़ की बजाय एक DAG है) और अद्वितीय

थोड़ा प्रदर्शन:

git init
git commit --allow-empty -m'Commit One.'
git tag -a -m'Tag One.' 1.2.3
git describe    # => 1.2.3
git commit --allow-empty -m'Commit Two.'
git describe    # => 1.2.3-1-gaac161d
git commit --allow-empty -m'Commit Three.'
git describe    # => 1.2.3-2-g462715d
git tag -a -m'Tag Two.' 2.0.0
git describe    # => 2.0.0

git describe उत्पादन का git describe निम्नलिखित घटकों के होते हैं:

  1. आप जो वर्णन कर रहे हैं, उसमें से नवीनतम टैग पहुंचने योग्य है
  2. कमिट और टैग के बीच की संख्या (अगर गैर-शून्य)
  3. कमिट के (संक्षिप्त) आईडी (यदि # 2 गैर-शून्य है)

# 2 है जो आउटपुट मोनोटोनिक बनाता है, # 3 है जो इसे अद्वितीय बनाती है # 2 और # 3 छोड़े गए हैं, जब कमिट टैग है, जिससे git describe उत्पादन रिलीज के लिए भी उपयुक्त है।


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

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

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


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

git log --pretty=oneline | wc -l

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

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

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


    git rev-list BRANCHNAME --count

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

    git log --pretty=oneline | wc -l





dvcs