2012-08-07 14 views
12

मेरे पास एक टीम में काम करते समय Django-South का उपयोग करने के बारे में एक छोटा सवाल है।एक टीम में काम करते समय Django दक्षिण प्रवासन संघर्ष

क्या होता है यदि दो लोग एक ही फ़ाइल में परिवर्तनों पर माइग्रेशन फ़ाइल बनाते हैं?

उदाहरण के लिए, ए और बी एक ही Django ऐप पर काम कर रहे हैं। वे माइग्रेशन 005 पर अलग-अलग शाखाओं में काम कर रहे हैं। अब, ए और बी दोनों एप्पल/models.py को संशोधित करते हैं और माइग्रेशन फ़ाइल को स्टार्ट माइग्रेशन का उपयोग करते हैं। वे माइग्रेशन 006 पर हैं, लेकिन पूरी तरह से अलग माइग्रेशन फ़ाइल 006 के साथ हैं। मुझे लगता है कि जब वे अपनी शाखाओं को विलय करते हैं, तो दक्षिण में कुछ त्रुटि हो सकती है।

क्या इस संघर्ष को हल करने के लिए कोई समाधान है? या दक्षिण अपने आप को हल करने के लिए पर्याप्त स्मार्ट है?

उत्तर

19

इस मुद्दे के बारे में दक्षिण के documentation वार्ता:

टीमों और माइग्रेशन के साथ इस मुद्दे तब होता है जब एक से अधिक व्यक्ति एक ही समयावधि में एक प्रवास बनाता है, और वे दोनों बिना अन्य लागू किया गया है प्रतिबद्ध मिल । यह दो लोगों के समान है एक ही समय में एक ही फ़ाइल को एक वीसीएस में संपादित करना, और वीसीएस की तरह, दक्षिण में समस्या का समाधान करने के तरीके हैं।

Inconsistent migration history 
The following options are available: 
    --merge: will just attempt the migration ignoring any potential dependency 
     conflicts. 

आप फिर से रन --merge साथ माइग्रेट करते हैं, दक्षिण बस लागू होंगे:

ऐसा होता है, नोट करने के लिए पहली बात यह है कि दक्षिण समस्या का पता लगाने जाएगा, और इस प्रकार का संदेश जारी है माइग्रेशन जो आउट ऑफ़ ऑर्डर में अनुपलब्ध थे। यह आमतौर पर काम करता है, क्योंकि टीम अलग-अलग मॉडल पर काम कर रही हैं; यदि ऐसा नहीं होता है, तो आपको वास्तविक माइग्रेशन परिवर्तनों को देखने और उन्हें मैन्युअल रूप से हल करने की आवश्यकता होगी, की संभावना है कि वे संघर्ष करेंगे।

नोट करने के लिए दूसरी बात यह है कि, जब आप किसी और के मॉडल परिवर्तन अपने स्वयं के प्रवास के साथ पूरा में खींच, आप एक नई खाली प्रवास विकास की दोनों शाखाओं में जमे हुए परिवर्तन है कि बनाने की आवश्यकता होगी है (यदि आपने Mercurial का उपयोग किया है, तो यह एक विलय प्रतिबद्धता के बराबर है)। ऐसा करने के लिए, बस चलाने:

./manage.py schemamigration --empty appname merge_models 

(ध्यान दें कि merge_models सिर्फ एक प्रवास नाम है; के लिए इसे बदलने के लिए जो भी आप की तरह)

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

+1

यह दिखाता है कि दस्तावेज़ों को पढ़ना अच्छा है;) +1 – Tadeck

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