आपको git-flow को देखना चाहिए । यह एक उत्कृष्ट (और लोकप्रिय) शाखा मॉडल है।
गिट फ्लो सारांश
शाखाओं में
मुख्य चड्डी जो हमेशा के लिए आसपास रहती हैं develop
और हैं master
। master
आपकी नवीनतम रिलीज़ को develop
होल्ड करता है और आपकी नवीनतम "स्थिर" डेवलपमेंट कॉपी रखता है।
योगदानकर्ता feature
शाखाएँ बनाते हैं ( feature/
अधिवेशन के साथ उपसर्ग ) develop
:
$ git checkout -b feature/my-feature develop
और hotfix
शाखाएँ ( hotfix/
सम्मेलन के साथ उपसर्ग ) बंद master
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
ये शाखाएं "डिस्पोजेबल" हैं, जिसका अर्थ है कि मुख्य चड्डी में वापस विलय करने से पहले उनका जीवनकाल छोटा होता है। वे कार्यक्षमता के छोटे टुकड़ों को एनकैप्सुलेट करने के लिए हैं।
शाखाओं को खत्म करना
जब एक feature
शाखा के साथ एक योगदानकर्ता किया जाता है , तो वे इसे वापस मर्ज कर देते हैं develop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
जब वे एक hotfix
शाखा के साथ किया जाता है , तो वे इसे वापस दोनों में विलय कर देते हैं master
और develop
इसलिए हॉटफ़िक्स आगे बढ़ता है:
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
यह निरंतर एकीकरण पहलू है।
विज्ञप्ति
जब आप किसी रिलीज़ को पैकेजिंग शुरू करने के लिए तैयार होते हैं, तो आप release
अपनी "स्थिर" develop
शाखा से एक शाखा बनाते हैं (उसी तरह feature
शाखाएँ बनाना )। आप फिर संस्करण संख्या को एक टैग (नीचे वर्णित) में टकराते हैं।
अलग-अलग release
शाखाओं का उपयोग करने से develop
आपको बग्स को ठीक करने और release
शाखा में परिष्करण स्पर्श जोड़ने के लिए नई सुविधाओं को विकसित करना जारी रखने की अनुमति मिलती है ।
जब आप रिलीज़ को पूरा करने के लिए तैयार हो जाते हैं, तो आप release
शाखा को दोनों में विलय कर देते हैं master
और develop
(सिर्फ एक जैसे hotfix
) ताकि आपके सभी परिवर्तन आगे बढ़ें।
टैगिंग
जब आप एक release
शाखा या शाखा बनाते हैं hotfix
, तो आप संस्करण संख्या को एक टैग में उचित रूप से टकराते हैं। वेनिला गिट के साथ, जो इस तरह दिखता है:
$ git tag -a <tag-name> -m <tag-description>
फिर आपको अपने दूरस्थ रिपॉजिटरी में टैग (अलग से) पुश करने होंगे:
$ git push --tags
यह आमतौर पर सिमेंटिक संस्करण का उपयोग करने के लिए सबसे अच्छा है जिसमें आपके संस्करण फॉर्म लेते हैं major.minor.hotfix
। मेजर बम्प्स पीछे की ओर असंगत हैं, जबकि मामूली और हॉटफ़िक्स बम्प्स पीछे की ओर असंगत नहीं हैं (जब तक कि आप बीटा में नहीं हैं, 0.x.x
)।
विलय
जैसा कि आपने ऊपर देखा, git-flow आपको निम्नलिखित कमांड के साथ शाखाओं को मर्ज करने के लिए प्रोत्साहित करता है:
$ git merge --no-ff <branch-name>
--no-ff
विकल्प आपको वर्तमान में चारों ओर झूठ बोल रही शाखाओं का एक समूह छोड़े बिना अपनी शाखा इतिहास के सभी बनाए रखने के लिए भंडार (ताकि कोई चिंता नहीं है, तो आप हर संस्करण के लिए एक शाखा के लिए नहीं होगा) के लिए प्रतिबद्ध है।
आपको साथ खींचने के लिए भी प्रोत्साहित किया जाता है
$ git pull --rebase
तो आप बहुत सारे बेकार मर्ज को नहीं जोड़ते हैं।
आप इन दोनों चीजों को डिफ़ॉल्ट रूप से करने के लिए git कॉन्फ़िगर कर सकते हैं .gitconfig
। मैं तुम्हें उस एक को देखने दूँगा;)
ब्राउजिंग संस्करण
जब कोई आपके कोडबेस के विशिष्ट संस्करण की तलाश में होता है, तो वे टैग को नाम से देख सकते हैं:
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
या, अगर कोई गितुब पर ब्राउज़ कर रहा है, तो "शाखाओं" ड्रॉपडाउन में "टैग" टैब भी है।
Git-flow एक्सटेंशन (अनुशंसित) का उपयोग करना
इस मॉडल का उपयोग करने का मेरा पसंदीदा तरीका git के लिए git flow एक्सटेंशन है।
( संपादित करें: लुई ने एवीएच कांटा की सिफारिश की है जो git describe
अब बेहतर काम करता है और अब अधिक सक्रिय हो सकता है। धन्यवाद लुई।)
विस्तार सभी गंदे भागों को स्वचालित करता है (जैसे merge --no-ff
विलय के बाद शाखाओं का उपयोग करना और हटाना) ताकि आप अपने जीवन के साथ जुड़ सकें।
उदाहरण के लिए, एक्सटेंशन के साथ, आप एक सुविधा शाखा बना सकते हैं जैसे:
$ git flow feature start my-feature-name
और इसे खत्म करो
$ git flow feature finish my-feature-name
हॉटफ़िक्स और रिलीज़ के लिए आदेश समान हैं, हालांकि वे शाखा नाम के स्थान पर संस्करण संख्या का उपयोग करते हैं, जैसे:
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
Git flow तब आपके लिए संस्करण टैग बनाता है और कृपया आपको किसी भी कॉन्फ़िगरेशन या प्रकट फ़ाइलों में संस्करण को टक्कर देने के लिए याद दिलाता है (जो आप ग्रंट जैसे कार्य प्रबंधक के साथ कर सकते हैं)।
आशा है कि मदद करता है :) मुझे यकीन नहीं है कि आप इसे अपने ट्रैविस सीआई सेटअप के साथ कैसे एकीकृत करेंगे, लेकिन मुझे लगता है कि जीथूको आपको मिल जाएगा।