django - जेगो कांटे पर दक्षिण माइग्रेशन बनाए रखना



django-models merge (1)

आधिकारिक दक्षिण वर्कफ़्लो:

आधिकारिक दक्षिण सिफारिश - --merge फ्लैग के साथ प्रयास करना है: http://south.readthedocs.org/en/latest/tutorial/part5.html#team-workflow

यह स्पष्ट रूप से सभी मामलों में काम नहीं करेगा, मेरे अनुभव से यह सबसे ज्यादा हालांकि काम करता है।

नुकसान:

  • एक ही मॉडल में कई बदलाव अभी भी तोड़ सकते हैं
  • डुप्लिकेट बदलाव चीजों को तोड़ सकते हैं

आमतौर पर एक ही मॉडल में एक साथ परिवर्तन से बचने के लिए "बेहतर" रास्ता है, ऐसा करने का सबसे आसान तरीका त्रुटि-खिड़की को जितना संभव हो उतना कम करके होता है।

इन मामलों में मेरा व्यक्तिगत वर्कफ़्लो:

छोटे फोर्कों के साथ जहां मॉडल परिवर्तन शुरुआत से स्पष्ट हैं:

  1. डिस्कस जो मॉडल के परिवर्तन को कांटा के लिए किया जाना चाहिए
  2. संघर्षों से बचने के लिए जितनी जल्दी हो सके दोनों / सभी शाखाओं में उन परिवर्तनों को लागू करें
  3. कांटा पर काम ....
  4. कांटा विलय करें जो कोई नया माइग्रेशन नहीं देता

बड़े फोर्कियों के साथ जहां परिवर्तन हमेशा स्पष्ट नहीं होते हैं और / या फिर से बदलेंगे:

  1. नवीनतम मास्टर के साथ अद्यतित रहना / शाखा को जितना संभव हो सके विकास की कोशिश करते समय सामान्य कांटा और विकास सामग्री करते हैं
  2. वापस विलय करने से पहले, कांटा में सभी स्कीमा माइग्रेशन हटा दें
  3. मास्टर से सभी परिवर्तन मर्ज करें / विकास करें
  4. सभी आवश्यक स्कीमा परिवर्तनों को फिर से बनाएं
  5. विकसित करने के लिए मर्ज करें / मास्टर

मैं कुछ जटिल तर्क (बहुत से विभिन्न वर्कफ़्लोज़, दृश्य, संकेत, एपीआई, पृष्ठभूमि कार्यों आदि) के साथ एक बहुत जटिल डीजेंगो प्रोजेक्ट (50+ मॉडल) पर काम कर रहा हूं। चलिए इस project-base कॉल करते हैं। वर्तमान में Django 1.6+ दक्षिण माइग्रेशन और काफी कुछ अन्य तृतीय पक्ष ऐप्स का उपयोग कर रहा है

अब, इन परियोजनाओं में से एक को इस प्रोजेक्ट का एक दोराहे बनाना है जो कुछ क्षेत्रों / मॉडल को यहां और वहां जोड़ देगा और इसके ऊपर कुछ अतिरिक्त तर्क होगा। चलो इस project-fork । अतिरिक्त काम के अधिकांश मौजूदा मॉडल के ऊपर होंगे, लेकिन कुछ नए भी होंगे।

project-base विकसित होने के साथ project-base , हम चाहते हैं कि इन सुविधाओं को project-fork (बहुत कुछ रिसाव / जीआईटी-मर्ज में विलय)। project-fork में अतिरिक्त बदलाव project-base में वापस नहीं project-fork जाएंगे।

यह पूरा करने का सबसे अच्छा तरीका क्या हो सकता है? मेरे कुछ विचार यहां दिए गए हैं:

  1. project-fork में दक्षिण विलय का उपयोग करें, इसे project-base से नवीनतम परिवर्तनों के साथ अद्यतित रखने के लिए, जैसा कि यहां बताया गया है । किसी भी संभावित संघर्ष से बचने के लिए शिथिल रूप से युग्मित के रूप में project-fork से नया तर्क रखने के लिए सिग्नल और किसी भी अन्य साधन का उपयोग करें।

  2. मूल project-base मॉडलों में से किसी भी को संशोधित न करें और इसके बजाय अलग-अलग ऐप्स में नए मॉडल बनाएं जो पुराने मॉडल का संदर्भ देते हैं (अर्थात OneToOneField का उपयोग OneToOneField )। अतिरिक्त तर्क पुराने और / या नए ऐप्स में समाप्त हो सकता है

  3. कृपया अपने विचार यहाँ :)

मैं विकल्प 1 के साथ जाना होगा क्योंकि यह एक संपूर्ण रूप से कम जटिल लगता है, लेकिन इससे अधिक जोखिम हो सकता है यहां बताया गया है कि मैं इसे कैसे देखूंगा:

project-base पर माइग्रेशन:

  • 0001_project_base_one
  • 0002_project_base_two
  • 0003_project_base_three

project-fork पर माइग्रेशन:

  • 0001_project_base_one
  • 0002_project_fork_one

मर्ज किए जाने के बाद, माइग्रेशन इस तरह दिखेंगे:

  • 0001_project_base_one
  • 0002_project_base_two
  • 0002_project_fork_one
  • 0003_project_base_three
  • 0004_project_fork_merge_noop (दोनों परियोजनाओं के परिवर्तनों में मर्ज करने के लिए जोड़ा गया)

क्या इस दृष्टिकोण का उपयोग करने के लिए कोई नुकसान है? क्या कोई बेहतर तरीका है?

आपके समय के लिए शुक्रिया।





rebase