मॉड्यूल विकास के लिए संस्करण नियंत्रण


22

मैं सोच रहा हूं कि क्या कोई अच्छा सम्मेलन है, जहां तक ​​संस्करण नियंत्रण चला जाता है, एक ऐसे मॉड्यूल को विकसित करने के लिए जिसे आप दोनों एकल Magento उदाहरण में उपयोग कर रहे हैं और एक सामुदायिक मॉड्यूल के रूप में जारी करना चाहते हैं।

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

वर्तमान में जो मैं कर रहा हूं वह मेरी साइट रिपॉजिटरी के अंदर विकसित हो रहा है, और मैं इसे जल्द ही एक अलग रिपॉजिटरी में तोड़ने की योजना बना रहा हूं। उस बिंदु पर, मैं क्या करूँगा संभावना है:

  • मेरे स्थानीय वातावरण में एक व्यक्तिगत मॉड्यूल भंडार के भीतर मॉडेम का उपयोग कर बनाएँ
  • जब मैं कोड को तैयार करने के लिए तैयार हूं तो साइट रिपॉजिटरी में परिवर्तन कॉपी करें

उम्मीद है कि वहाँ एक बेहतर तरीका है?


क्या आपने संगीतकार की कोशिश की?
फ्लोरिनसेल यह

मैं इसके साथ एक बिंदु पर थोड़ा बहुत खेलता था, लेकिन इसे गंभीरता से इस्तेमाल नहीं किया। क्या आपको यह पसंद है?
कालेंजर्डन

हां, विनय ने संगीतकार के बारे में हाल ही में लंदन में मैगेंटो मीटअप में एक प्रस्तुति दी थी। इसका उपयोग करना केस केस इन्फ्रास्ट्रक्चर (एकल वेब सर्वर, मल्टी वेब सर्वर) के लिए भिन्न होता है। वरीयताओं पर निर्भर करता है।
फ्लोरिनसेल यह

जवाबों:


16

हमारे पास कुछ मॉड्यूल हैं जहां हमने यह किया है और जो हमने अनिवार्य रूप से किया है वह है:

  • मॉड्यूल के लिए एक गिट रेपो सेटअप करें।
  • इस मॉड्यूल को उत्पादन साइट के कोडबेस में तैनात करें और सब कुछ शामिल करें:
    • नरम-लिंक modman द्वारा बनाई गई
    • .Modman निर्देशिका जो क्लोन मॉड्यूल रिपॉजिटरी का निर्माण करती है
  • इसे अन्य संस्करणों और / या देव परिवेश और परीक्षण के लिए "तैनात" करने के लिए मोडमैन का उपयोग करें।

इसे इस तरह करने से आपको मॉड्यूल विकास के लिए आवश्यक लचीलापन प्राप्त होता है, साथ ही साथ एकल साइट पर कोड को भी संस्करणित करता है, और यदि आप एकल-साइट कोडबेस में मॉड्यूल में परिवर्तन करते हैं, तो आप सीधे मॉड्यूल रिपॉजिटरी में वापस आ सकते हैं। रेपो वहाँ है .Modman निर्देशिका में।

अद्यतन: जब मैंने मूल रूप से यह लिखा था तो मैं अपने जवाब में इस बात को ध्यान में रखने में विफल रहा कि Git (उप) मॉड्यूल को एक रिपॉजिटरी के लिए प्रतिबद्ध होने की अनुमति नहीं देता है, इस मामले में "सब कुछ" करने के लिए कुछ विस्तार की जरूरत है!

संयोग से, ऐसा इसलिए है क्योंकि मैंने एसवीएन द्वारा रखे गए प्रोडक्शन कोडबेस में गिट रिपोज में रखे गए मॉड्यूल्स को तैनात करने के लिए मोडमैन का इस्तेमाल करते हुए इसे अधिक बार किया है ... और सबवर्सन के पास पूरे जीएसटी पेड़ को वीसीएस में रखने से रोकने के लिए कोई स्क्रब नहीं है।

तो यहाँ जाता है ...

  1. यदि आप उत्पादन साइट के कोड को घर पर लाने के लिए SVN का उपयोग कर रहे हैं, तो आपको कोई समस्या नहीं होनी चाहिए क्योंकि सबवर्सन में (व्यावहारिक रूप से) उप-मॉड्यूल की कोई अवधारणा नहीं है। यह बुरा नहीं होगा

  2. यदि आप उत्पादन साइट के कोड के लिए Git का उपयोग कर रहे हैं, तो आपको साइट के कोड रिपॉजिटरी में "सब कुछ करने के लिए" सब-मॉड्यूल का उपयोग करना होगा। कुछ इस तरह क्लोन करने के लिए modman का उपयोग करने के बाद:

    modman clone ssh://git@bitbucket.org/<user>/<repo>.git

    आप इसे उप-मॉड्यूल के रूप में भी जोड़ना चाहेंगे:

    git submodule add ssh://git@bitbucket.org/<user>/<repo>.git .modman/<repo>

    एक बार जब आप ऐसा कर लेते हैं, तो आपको सूचकांक में .modman निर्देशिका और .gitmodules फ़ाइल को जोड़ने और इसे करने में सक्षम होना चाहिए।

    रिपॉजिटरी को क्लोन करने के बाद, जो मॉडेम के माध्यम से इन मॉड्यूल का उपयोग कर रहा है, बस सबमॉड्यूल्स को अपडेट करें और अपडेट करें:

    git submodule init
    git submodule update

पुनश्च मैं अब सभी नए प्रोजेक्ट्स पर Git पूर्णकालिक का उपयोग करता हूं, इसलिए उम्मीद है कि यह ओवरसाइट फिर से नहीं होगा। क्षमा करें दोस्तों। ;)


वाह जो अद्भुत लग रहा है। उस स्पिन को देने जा रहे हैं।
कालेंजर्डन

क्या आपने git में Submodules पर भी विचार किया है?
फ्लोरिनसेल यह

सबमॉड्यूल्स की आवश्यकता है सब कुछ एक निर्देशिका में हो। मोडमैन अनिवार्य रूप से हर चीज के लिए नरम-लिंक बनाता है, जिससे इसे पूरे डायर संरचना में फैलाया जा सकता है।
davidalger

जब आप मॉडमैन डेटा सहित सब कुछ करने के लिए कहते हैं, तो क्या आप प्रोजेक्ट निर्देशिका संरचना के भीतर समरूपता को कम करने के लिए कहते हैं? जब मैं git add -A, यहाँ मुझे क्या मिलता है: monosnap.com/image/X1EoGyK12UQfYDUqA9hvpUUw modman deployकमांड का उपयोग करना कमांड से अलग कुछ भी करने के लिए प्रकट नहीं होता है clone- केवल फ़ाइलों को सिमिलिंक करता है (हालाँकि यह काम करने के लिए VCS की आवश्यकता नहीं है) ।
कालेंजर्दन

यह सही है, मुलायम लिंक सहित सब कुछ। यह ऊपर उल्लेख किया जाना चाहिए, लेकिन यहाँ कुंजी नरम संबंध है इसलिए वे विभिन्न वातावरण में काम करते हैं। मॉडमैन के पुराने संस्करणों ने उनका समर्थन नहीं किया। यदि आप उन्हें प्रतिबद्ध नहीं करते हैं, तो आपको उनके लिए उपेक्षा की आवश्यकता होगी, और यह सुनिश्चित करना होगा कि आपके पास अन्य envirnomenta पर तैनात करने के लिए मॉडमान है। आंतरिक रूप से, git लिंक को बनाने के लिए आवश्यक पथ के साथ txt फ़ाइल के रूप में सॉफ्ट लिंक को संग्रहीत करता है।
davidalger

7

ऐसा लगता है कि वर्तमान सम्मेलन के लिए समर्थन प्रदान करना है:

जहाँ तक निर्देशिका संरचना है, यह नंगे-न्यूनतम है और अधिमानतः मॉड्यूल सामुदायिक कोड पूल में स्थापित है।

एक नंगे-न्यूनतम सुझाई गई निर्देशिका संरचना होगी:

.
└── app
    ├── code
       └── community
           └── YourCompany
               └── YourModule
                   ├── Block
                   ├── Model
                      └── Observer.php
                   └── etc
                       └── config.xml
    ├── design
       └── frontend
           └── base
               └── default
                   ├── layout
                      └── module.xml
                   └── template
                       └── yourmodule
    └── etc
        └── modules
            └── YourCompany_YourModule.xml

वैकल्पिक / अच्छा-से-हव्स:

  • एक वर्णन, कुछ स्क्रीन शॉट्स और कुछ बुलेटेड सुविधाओं के साथ जीथब लैंडिंग पृष्ठ।
  • एक स्थापित डेमो स्टोर के लिए लिंक भी अच्छा होगा
  • आपके उत्पाद का एक पेंचकस / दो मिनट का अवलोकन

संपादित करें: मुझे गलत समझा जा सकता है।

Modman / gitignore के संयोजनों का उपयोग करके आपके मॉड्यूल को आपके परीक्षण परिवेश से दूर रखा जा सकता है। उपरोक्त फ़ोल्डर संरचना का उपयोग करके आप स्पष्ट रूप से केवल अपने मॉड्यूल की फ़ाइलों को अपने रेपो के लिए प्रतिबद्ध / स्थापित कर सकते हैं। इस मामले में, डेविड का जवाब अधिक लागू है। देव / तैनाती के लिए मोडमैन समर्थन सर्वसम्मति प्रतीत होता है।


धन्यवाद फिल। यह मॉड्यूल के विकास / प्रकाशन के दौरान कुछ अच्छी जानकारी के रूप में सबसे अच्छा अभ्यास जैसा दिखता है, लेकिन फिर मैं डेविड के जवाब की तर्ज पर जानकारी की तलाश में था।
कालेंजर्डन

4
सिर्फ एक ASCII ड्राइंग के लिए वोट दें
बेन Lessani - Sonassi

@teamsonassi: खबरदार, कि treeकमांड से आउटपुट कॉपी करने जितना आसान हो सकता है :-)
एलेक्स

मुझे परवाह नहीं है अगर वह इसके माध्यम से किया cowsay- ASCII कला सिर्फ जवाब अच्छा लग रहा है: डी
बेन सबक - सोनासी

Forewarned रहो, मैं का उपयोग करें cowsayऔर figlet.... बहुत कुछ
philwinkle

5

यहां तक ​​कि स्वयं इसे अभी तक प्रयास नहीं करने के बावजूद, मैं इसके लिए संगीतकार का उपयोग करने की सिफारिश करूंगा ।

निर्भरता सहित संस्करण

composer.lockफ़ाइल को रिपॉजिटरी में रखकर , आप सभी मॉड्यूल के संस्करणों को ठीक करते हैं और हमेशा अपने VCS ( git checkout, svn ..) और फिर का उपयोग करके एक विशिष्ट संस्करण (एक शाखा, टैग या एक पुराने संस्करण) को पुनर्स्थापित कर सकते हैंcomposer.phar install

कमियां

एक समस्या जो उत्पन्न होती है, वह यह है कि आपकी तैनाती आसानी से कई स्रोतों पर निर्भर कर सकती है (उदाहरण के लिए GitHub) विफलता के कई बिंदुओं का निर्माण।

इसलिए हमें किसी प्रकार के कैश या प्रॉक्सी की आवश्यकता होगी जो उन मॉड्यूल को संग्रहीत करता है ताकि हम हमेशा तैनात रहें।

सतीस इस उद्देश्य की पूर्ति करने में सक्षम प्रतीत होता है (देखें https://github.com/researchgate/broker ) और मेरा प्रश्न /programming//q/16211671/288568


1
आर्टवर्क के लिए धन्यवाद (देखें getcomposer.org/doc/05-repositories.md#artifact ) विभिन्न स्रोतों के आधार पर कम करना और नियंत्रित करना आसान है। संगीतकार के प्लगइन आर्किटेक्चर को उदाहरण के लिए पैकेजों को कैश करने की अनुमति देता है AWS (अब कार्यान्वयन के लिए एक कड़ी नहीं मिल सकती)
फ्लाइंगमैन

मॉड्यूल एक दूसरे पर निर्भर नहीं होना चाहिए?
user2045

2

Kalen,

हो सकता है कि मैं आपके वर्कफ़्लो को ठीक से पकड़ नहीं पाया, लेकिन ऐसा लग रहा था कि आप स्थानीय स्तर पर एक मैगनेटो रेपो में विकसित हो रहे हैं, फिर एक मामूली रेपो में अलग हो रहे हैं। सिर्फ अपने आईडीई में ./modman/modulesname/CONTENTS को एडिट क्यों न करें और जिस कोड को आप विकसित करने के लिए उपयोग करते हैं, उसमें स्वतंत्र रूप से मॉड्यूल रेपो को पुश कोड दें। आप उत्पादन के लिए तैनात करने के लिए modman का उपयोग कर सकते हैं, आप cli से .modman / मॉड्यूलनाम / फ़ोल्डर में अलग-अलग रेपो के साथ बातचीत कर सकते हैं या अपने IDE में एक संस्करण स्रोत जोड़ सकते हैं, हालांकि वास्तव में उपयोग कर रहे हैं। अपने रिपॉजिटेड लिंक्ड पथ को अपने से बाहर रखने के लिए। वेबरोट बेहतर खेलने जा रहा है।

वहाँ भी modman की एक बहुत अच्छी सुविधा है कि कई लोगों को उपयोग करने के लिए प्रतीत नहीं होता है। बैश स्क्रिप्ट एक .badeir फ़ाइल को .modman रिपॉजिटरी में व्याख्या करता है, अगर फ़ाइल modman मौजूद नहीं है, तो modman फ़ाइल में। स्तर पर फ़ोल्डर के रूप में समान स्तर पर सिमलिंक नियम लागू होता है ... यदि .bodir फ़ाइल मौजूद है, तो। सामग्री एक सबफ़ोल्डर का वर्णन करती है, जो आपके Magento कोड के शीर्ष स्तर पर एक .modman पथ से नीचे है ... दूसरे शब्दों में, आप 'BaseMagento1.9.1.0' जैसे फ़ोल्डरों में सभी बेस Magento संस्करणों को चला सकते हैं (और मैं कर सकता हूं) 'BaseMagento1.14.2.0' और मोडमैन इन फोल्डर को इनिट करता है। .Modman पथ में एक -badeir फ़ाइल जोड़ें और आप आसानी से सामग्री बदल सकते हैं। यह संस्करण परीक्षण के लिए अच्छी तरह से काम करता है।


धन्यवाद, दिलचस्प सामान! जब से मैं इस वर्कफ़्लो का उपयोग कर रहा था थोड़ी देर हो गई!
कालेंजर्दन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.