2009-09-28 19 views
28

Git + Heroku (पर रूबी) के साथ उपयोग करने के लिए एक अच्छा तैनाती रणनीति क्या है?हेरोकू के साथ शाखा रणनीति का उपयोग कर अच्छा गिट तैनाती?

वर्तमान में जिस तरह से मैं अपने मूल Git भंडार के साथ काम: सभी सुविधाएं (या 'कहानियों') पहली शाखाओं के रूप में बाहर जाँच कर रहे हैं, तो गुरु के साथ विलय कर दिया और मूल करने के लिए धक्का दिया मिलता है।

कुछ भी मूल/मास्टर को धक्का दे एक स्क्रिप्ट है कि मचान क्षेत्र के लिए नए रेल कोड (सरल रेल वेबसर्वर) खींचती है चलाता है।

जब मेरे लिए हेरोोकू में एक नया उत्पादन संस्करण धक्का देने का समय आता है, तो क्या मुझे एक नई शाखा बनाना चाहिए (जिसे उत्पादन_वर्जन_121 कहा जाता है), और किसी भी तरह से हेरोोक को धक्का दें?

आदर्श रूप में मैं लेने के लिए और जो पिछले डेवलपमेंट संस्करण मैं उत्पादन शाखा में शामिल होना चाहिए से सुविधाओं का चयन ... परीक्षण करते हैं, और Heroku करने के लिए धक्का चाहते हैं।

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

एनबी। मैं पहले कैपिस्ट्रानो से परहेज करने की कोशिश करने जा रहा हूं और अब कुछ मैन्युअल रूप से काम कर रहा हूं।

विचार? सर्वोत्तम प्रथाएं?

उत्तर

32

जेमकटर परियोजना में हमारे पास production शाखा है।कोई भी परिवर्तन है कि हम उत्पादन साइट पर देखना चाहता हूँ कि शाखा में विलय कर दिया, और उसके बाद के साथ तैनात हो:

git push heroku production:master 

staging शाखा मचान साइट (भी Heroku पर)

+0

धन्यवाद डेविड! मैं उत्सुक था अगर कोई इस तरह से कर रहा था। ठीक है, मैं सिर्फ अपने रिमोट "मास्टर" का उत्पादन के रूप में उपयोग कर रहा हूं .. इसलिए तैनात करने के लिए मैं बस कर रहा हूं: गिट पुश हेरोकू (जब समय आता है) समस्या यह है कि मेरे पास अभी तक विशेषताएं नहीं हैं अभी तक एक उत्पादन परिनियोजन में शामिल करने के लिए चुनने और चुनने के लिए ... मुझे उम्मीद है कि उत्पन्न होने की आवश्यकता है, इस मामले में मुझे अपने रिमोट गिट सर्वर पर एक कानूनी "उत्पादन" शाखा शुरू करनी होगी। अगली बार जब मैं इसे आज़माता हूं: गिट पुश हेरुकू उत्पादन: मास्टर मुझे लगता है कि यह शिकायत करेगा और मुझे "बल" ध्वज का उपयोग करने की आवश्यकता होगी ताकि उसकाोकू उस पर फेंक दे जो उसे ट्रैक कर रहा था? – Zaqintosh

+0

मेरा एकमात्र अन्य सवाल यह है कि, क्या आप किसी भी चीज़ के लिए अपने रिमोट मास्टर का उपयोग कर रहे हैं? या आप शाखाओं में काम करते हैं और शाखाओं से/100% समय में विलय/विलय करते हैं? – Zaqintosh

+0

चाहे आप को मजबूर करना है या नहीं, इस पर निर्भर करेगा कि "उत्पादन" रिमोट मास्टर पर वर्तमान में मौजूद चीज़ों का प्रत्यक्ष वंशज है या नहीं। जेमकटर ट्रंक के रूप में "मास्टर" शाखा का उपयोग करता है। यह वह जगह है जहां सभी नवीनतम परिवर्तन जाते हैं। फ़ीचर शाखाएं बनाई जाती हैं, फिर ट्रंक में वापस विलय कर दी जाती हैं। कभी-कभी व्यक्तिगत काम या फीचर शाखाएं उत्पादन शाखा में विलय कर दी जाती हैं, कभी-कभी मास्टर को सीधे विलय कर दिया जाता है यदि हम इसे सब चाहते हैं। –

7

तरीके से इस बारे में जाने के लिए की एक किस्म के होते हैं, और यह वास्तव में आपकी पसंद पर निर्भर करता है।

मैं तुम्हें मेरे सिर के ऊपर से एक संभव रणनीति देंगे: यह देखते हुए आप पहले से ही गुरु का उपयोग करता है एक स्वचालित मचान सेटअप है, मैं एक 'उत्पादन' शाखा बनाने का सुझाव देते हैं। जब आप उत्पादन के लिए एक फिक्स/फीचर को बढ़ावा देना चाहते हैं, तो आप विषय शाखा को अपनी 'उत्पादन' शाखा में विलय कर देंगे।

git checkout production 
git pull . my-topic-branch 
(resolve any conflicts) 

जब आप वास्तव में धक्का अपने उत्पादन सर्वर के लिए कि कोड, आप (शायद एक टाइमस्टैम्प के साथ) शाखा का एक अलग नाम का उपयोग कर tag चाहिए करने के लिए तैयार कर रहे हैं। फिर आप उत्पादन शाखा को हरोकू में धक्का देते हैं।

git checkout production 
git tag release-200910201249 

मैं एक स्क्रिप्ट या Git उर्फ ​​बनाने टाइम स्टाम्प्स के लिए टैगिंग स्वचालित करने के लिए, एक सुसंगत नामकरण योजना का उपयोग कर के बाद से सुझाव देंगे महत्वपूर्ण है।

git config alias.dtag '!git tag release-`date "+%Y%m%d%H%M"`' 

मुझे सिर्फ टाइप करते git dtag जब मैं एक टाइमस्टैम्प के साथ एक रिलीज टैग करना चाहते हैं अनुमति देता है कि: मैं कुछ इस तरह का उपयोग करें।

आप टैग git tag का उपयोग कर देख सकते हैं और git show release-1234 का उपयोग कर उन्हें देख सकें। टैग के बारे में अधिक जानकारी के लिए, git help tag चलाते हैं। टैगिंग सहायक पर आपको यह Github guide भी मिल सकता है। मैं भी अन्य लोगों के कार्य प्रवाह ऊपर पढ़ने की सलाह देते हैं (यहाँ a nice writeup है) और लेने और चुन क्या आप के लिए काम करता है।

+0

उत्तर के लिए धन्यवाद! मैं टैगिंग के साथ बहुत परिचित नहीं हूं या वास्तव में क्या करता हूं ... हालांकि मैं समझता हूं कि आपकी सलाह क्या है (ज्यादातर), गिट कमांड के माध्यम से प्रक्रिया का एक छोटा उदाहरण या रन-थ्रू होना अच्छा होगा। फिर से धन्यवाद! – Zaqintosh

+0

मैंने टैगिंग के लिए कमांड जोड़े हैं और अतीत में उपयोग किए गए एक आसान उपनाम। ध्यान दें कि ये एक स्थानीय भंडार के लिए हैं। आप 'गिट पुश --टैग' का उपयोग करके टैग को अन्य रेपो में दबा सकते हैं। –

+0

तो मान लें कि आप एक रिलीज-xxxxxxxxx दबाते हैं ('गीट पुश हेरोकू उत्पादन: मास्टर'' का उपयोग करके और यह बोनस। आप अंतिम ज्ञात अच्छे संशोधन के लिए कैसे वापस रोल करते हैं? दूसरे शब्दों में, आप एक विशिष्ट टैग कैसे दबाते हैं? – brittohalloran

16

कभी के लिए एक समान उद्देश्य में कार्य करता चूंकि मैंने विन्सेंट ड्रिसेन के A successful Git branching model को पढ़ा है, इसलिए मुझे लगाया गया है। मेरी पूरी कंपनी (हम में से 8) ने अब इस मॉडल पर मानकीकृत किया है और मैंने जिन कुछ अन्य परामर्श से परामर्श किया है, वे भी इसका उपयोग करना शुरू कर चुके हैं।

अधिकांश लोगों ने मुझे यह दिखाया है कि वे पहले से ही ऐसा कुछ कर रहे थे और इसे अनुकूलित करना बहुत आसान था।

संक्षेप में, आपके पास 2 शाखाएं हैं जो स्थायी (मास्टर और विकसित) हैं। ज्यादातर समय आप विकास के विकास और उन्हें वापस विकसित करने में विलय कर देंगे। जब आप उत्पादन रिलीज और हॉटफिक्सेस करते हैं तो चीजें थोड़ा अधिक जटिल होती हैं, लेकिन पोस्ट को दो बार पढ़ने के बाद, यह संलग्न हो जाती है।

आपकी सहायता के लिए git-flow नामक कमांड लाइन टूल भी है।

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

  • कोई संबंधित समस्या नहीं^_^