संख्या बनाने या नहीं के रूप में गिट संस्करणों को एकीकृत करने के लिए?


12

एक सहकर्मी और मैं जब भी इसे बनाते हैं, तो वर्तमान git रिपॉजिटरी से प्राप्त संस्करण को एकीकृत करने के मुद्दों / खूबियों पर बहस / चर्चा करते हैं।

हमें लगता है कि योग्यता में शामिल हैं:

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

जो समस्याएं उत्पन्न हुई हैं (हमारे लिए) उनमें शामिल हैं:

  • IDE व्युत्पन्न बिल्ड सिस्टम (जैसे MPLABX) यह पता लगाना कठिन बना सकता है कि इस प्रकार के हुक को कहां रखा जाए (और यह अंत में सुंदर चीज़ को समाप्त कर सकता है)
  • अधिक काम वास्तव में इसे बिल्ड स्क्रिप्ट / मेकफाइल्स में एकीकृत करने का है
  • एक विशेष बिल्ड दृष्टिकोण के लिए युग्मन (जैसे कि क्या अगर एक व्यक्ति XCode और दूसरे MPLABX के साथ बनाता है) डाउनस्ट्रीम आश्चर्य पैदा कर सकता है

इसलिए हम उत्सुक हैं कि अन्य लोग इस बहस में कहाँ उतरे हैं। चर्चा का किस्सा बनना आसान है। वहाँ बहुत से लोग हैं, जो एंड-टू-एंड ऑटोमेशन पर जोर देते हैं, ऊपर के काम की मात्रा को लटकाते हैं और इसे बनाते हैं। और बहस के दूसरी तरफ बहुत सारे लोग हैं, जो केवल सबसे आसान काम करते हैं जो जोखिम के साथ काम करते हैं और रहते हैं।

क्या कोई तर्कपूर्ण जवाब है कि किस तरफ उतरना सबसे अच्छा है?

जवाबों:


15

हम संस्करण टैग के साथ git वर्णन का उपयोग करते हैं । प्रवाह मूल रूप से है:

  • उस संस्करण के लिए टैग बनाएं, जिस पर हम काम कर रहे हैं (उदाहरण के लिए v1.1.2)
  • हर बिल्ड रन git describe
  • जब हम जहाज करते हैं, तो टैग नाम का उपयोग करें

git describeटैग का नाम, टैग के बाद से आने वाले नंबर और टैग के हैश प्रदान करता है। एक नमूना टैग जैसा दिखता है:

v1.1.2-6-a3b27gae

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

हम हैश (और नंबर का निर्माण) पट्टी करते हैं क्योंकि इससे उपयोगकर्ताओं को हमारे संस्करण संख्याओं को समझना आसान हो जाता है। हम पाते हैं कि यह हमें दोनों दुनियाओं में सर्वश्रेष्ठ देता है, जबकि अभी भी पर्याप्त प्रासंगिक जानकारी प्रदान करता है जब इंजीनियरिंग जारी करता है।

वर्तमान में, हमारे पास इससे थोड़ा अधिक जटिल संस्करण है, लेकिन यह विचार बना हुआ है।


1
बस ध्यान दें: हैश इन it describe(स्ट्रिंग का अंतिम भाग) टैग के cset-id नहीं है , लेकिन परिवर्तन के हैश, जिसके लिए हम वर्णन करते हैं । मानव-पठनीय रूप में v1.1.2-6-a3b27gae"सिक्स चेंजसेट विथ चेंजसेट, टैगिंग विद v1.1.2-6, शॉर्ट चेंजसेट-हैश a3b27gae" होगा
आलसी बेजर

@LazyBadger - बिल्कुल। टैग के लिए हैश अपने आप में कम उपयोगी है, क्योंकि आप git checkout v1.1.2टैग के कमिट को आसानी से सूचीबद्ध कर सकते हैं git rev-list v1.1.2 | head -n 1
बीटगैमिट

6

हम एक SVN शॉप हुआ करते थे इसलिए यह गणित आसान था - बिल्ड नंबर SVN रिव्यु था और वह था। जब हमने डीसीवीएस में जाना शुरू किया तो हमने इसे जारी रखने की कोशिश की और पाया कि यह कुछ कारणों से विफल रहा।

सबसे पहले, कौन जानता है कि अगर रिब 69bc333bc8d8 पहले, बाद में या 25b0f0d1052c के साथ समवर्ती है? एसवीएन प्रणाली की तुलना में बहुत कम संदर्भ है जब आप कम से कम जानते थे कि 101 100 के बाद था। दूसरा, डीसीवीएस स्रोत नियंत्रण की प्रकृति चीजों को कई मायनों में गैर रेखीय बनाती है जब बाद के बिल्ड एक ही गेंद को आगे नहीं बढ़ा सकते हैं।

हम अंत में चीजों को बिल्ड नंबर वितरित करने के लिए बिल्ड सर्वर का उपयोग करने पर बस गए क्योंकि इसमें सही दृश्यता और इसे संभालने की क्षमता थी।


2

मैं सी # DLL के एक दृश्य स्टूडियो बिल्ड सिस्टम के लिए निम्न योजना का उपयोग स्वचालित रूप से संस्करण संख्याओं को उत्पन्न करने के लिए करता हूं (हमारे पास ऐतिहासिक रूप से ऐसे मुद्दे थे जिनकी तैनाती सही ढंग से नहीं की जा रही थी, इसलिए सही संस्करण की तैनाती की गारंटी देने के एक स्वच्छ तरीके की आवश्यकता थी)।

  • मेजर - हार्ड कोडित 1, आमतौर पर व्यावसायिक पक्ष द्वारा निर्धारित किया जाता है
  • मामूली - हार्ड कोडित 0, आमतौर पर व्यावसायिक पक्ष द्वारा निर्धारित किया जाता है
  • संशोधन - 1 जनवरी 2010 के बाद से दिनों की संख्या (या किसी अन्य मनमाने ढंग से शुरू होने की तारीख)
  • बिल्ड - आधी रात के बाद से सेकंड की संख्या (क्योंकि यह एक 16 बिट अहस्ताक्षरित संख्या है)

ध्यान दें कि यह मानता है कि आपके पास खेलने के लिए 2 फंसेबल 16-बिट अहस्ताक्षरित संख्याएं हैं। एक समान प्रणाली बनाना जो छोटी संख्या का उपयोग करता है और साथ ही किया जा सकता है।

यह भी ध्यान दें कि यदि आप उन्हें मेटा-डेटा के रूप में संलग्न कर सकते हैं तो गैर-संख्यात्मक क्षेत्र सहायक हो सकते हैं। उदाहरण के लिए सूचना संस्करण संस्करण के रूप में git संस्करण संख्या को जोड़ना।


2

मैं सीधे git स्टेटस के आउटपुट को लिंक कर रहा हूं, लॉग इन करें और एक्जीक्यूटेबल में बदलें। फिर उसे प्रिंट करने का विकल्प है। लाभ यह है कि आप न केवल यह पता लगाने में सक्षम हैं कि आपका बाइनरी किस शाखा से बनाया गया था, बल्कि यह भी है कि बिना स्रोत के कोड परिवर्तन शामिल हैं। कृपया देखें:

https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state

आपको उन 3 फाइलों का उपयोग करने में सक्षम होना चाहिए ताकि आप अपनी खुद की SCM स्थिति को ले जा सकें।


0

मैं ऑटोरेविजन के उपयोग की सिफारिश करूंगा

आप विभिन्न प्रकार के प्रारूपों में आउटपुट प्राप्त कर सकते हैं, उदाहरण के लिए एक सी स्टाइल हेडर

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

इसके अलावा, क्योंकि gitऑटोरेविजन इसके अलावा काम करता है svnऔर hgजब आप इसे सेट कर लेते हैं तो बहुत ज्यादा बदलाव किए बिना svn से दूर जाना आसान हो जाता है।


दुर्भाग्य से Autorevision के दस्तावेज़ों में कोई सिफारिश नहीं दी गई है। एक अद्वितीय और अचूक सॉफ़्टवेयर संस्करण स्ट्रिंग के निर्माण के लिए ऑटोरेविजन के उत्पन्न हेडर से आप कौन सी जानकारी का उपयोग / संयोजन करते हैं?
सिलीकोमैंसर

यह कैसे मानव पठनीय आप यह चाहते पर निर्भर करता है: <VCS_TAG>-<VCS_SHORT_HASH>, <VCS_TAG>-<VCS_TICK>या यहाँ तक कि <VCS_ACTION_STAMP>सभी काम करना चाहिए। यदि आप उन प्रतीकों में से प्रत्येक की पूरी सूची चाहते हैं, तो मैं सुझाव दूंगा कि मैन पेज देखें
dak180
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.