Django माइग्रेशन प्रलेखन से उद्धरण :
प्रत्येक एप्लिकेशन के लिए माइग्रेशन फ़ाइलें उस ऐप के अंदर "माइग्रेशन" निर्देशिका में रहती हैं, और इसके कोडबेस के भाग के रूप में, और इसके लिए प्रतिबद्ध होने के लिए डिज़ाइन की गई हैं। आपको उन्हें एक बार अपनी विकास मशीन पर बनाना चाहिए और उसके बाद अपने सहयोगियों की मशीनों, अपनी स्टेजिंग मशीनों और अंततः अपनी उत्पादन मशीनों पर समान माइग्रेशन चलाना चाहिए।
यदि आप इस प्रक्रिया का पालन करते हैं, तो आपको माइग्रेशन फ़ाइलों में कोई मर्ज विरोध नहीं होना चाहिए।
संस्करण नियंत्रण शाखाओं को मर्ज करते समय, आप अभी भी ऐसी स्थिति का सामना कर सकते हैं जहां आपके पास एक ही मूल माइग्रेशन के आधार पर कई माइग्रेशन हैं, जैसे कि यदि अलग-अलग डेवलपर्स ने समवर्ती रूप से माइग्रेशन पेश किया है। इस स्थिति को हल करने का एक तरीका _merge_migration_ को लागू करना है। अक्सर यह स्वचालित रूप से कमांड के साथ किया जा सकता है
./manage.py makemigrations --merge
जो एक नया माइग्रेशन पेश करेगा जो सभी वर्तमान हेड माइग्रेशन पर निर्भर करता है। बेशक यह केवल तब काम करता है जब सिर के पलायन के बीच कोई संघर्ष नहीं होता है, जिस स्थिति में आपको समस्या को मैन्युअल रूप से हल करना होगा।
यह देखते हुए कि यहां कुछ लोगों ने सुझाव दिया कि आपको संस्करण नियंत्रण के लिए अपना माइग्रेशन नहीं करना चाहिए , मैं उन कारणों पर विस्तार करना चाहूंगा कि आप वास्तव में क्यों हैं ऐसा करना चाहिए ।
सबसे पहले, आपको अपने उत्पादन प्रणालियों पर लागू होने वाले पलायन का रिकॉर्ड चाहिए। यदि आप उत्पादन में परिवर्तन करते हैं और डेटाबेस को स्थानांतरित करना चाहते हैं, तो आपको वर्तमान स्थिति का विवरण चाहिए। आप प्रत्येक उत्पादन डेटाबेस पर लागू किए गए माइग्रेशन का एक अलग बैकअप बना सकते हैं, लेकिन यह अनावश्यक रूप से बोझिल लगता है।
दूसरा, माइग्रेशन में अक्सर कस्टम, हस्तलिखित कोड होते हैं। उनके साथ स्वचालित रूप से उत्पन्न करना हमेशा संभव नहीं होता है ./manage.py makemigrations
।
तीसरा, माइग्रेशन को कोड समीक्षा में शामिल किया जाना चाहिए। वे आपके उत्पादन प्रणाली में महत्वपूर्ण बदलाव हैं, और बहुत सारी चीजें हैं जो उनके साथ गलत हो सकती हैं।
इसलिए संक्षेप में, यदि आप अपने उत्पादन डेटा की परवाह करते हैं, तो कृपया अपने माइग्रेशन को संस्करण नियंत्रण में जांचें।
makemigrations some_app
, तो न केवल उस सदस्य के नियंत्रण में आने वाले मॉडल प्रभावित होंगे, बल्कि अन्य संबंधित मॉडल भी प्रभावित होंगे। यही है, अन्य ऐप्स में माइग्रेशन फ़ाइलें (00 * _ *) बदल दी जाएंगी। और यह GitHub से धक्का या खींचने के दौरान कई संघर्ष समस्याओं का कारण बनता है। चूंकि वर्तमान में हमारा सिस्टम उत्पादन के लिए तैयार नहीं है, इसलिए हम सिर्फ.gitignore
माइग्रेशन फ़ाइल। हम अभी भी नहीं जानते कि सिस्टम के उत्पादन के बाद इसे कैसे हल किया जाए। क्या किसी के पास कोई उपाय है?