2012-01-31 15 views
7

वर्तमान में मेरे पास स्रोत नियंत्रण के तहत फ़ोल्डर में बैठे PHP फ़ाइलों का एक गुच्छा है। तार्किक रूप से मेरे पास संबंधित परियोजनाओं और साझा डेटाबेस का संग्रह है।PHP प्रोजेक्ट संगठन

  • प्रोजेक्ट 1 एक वेब अनुप्रयोग डेटाबेस के साथ बातचीत कर रहा है।
  • प्रोजेक्ट 2 कुछ पृष्ठभूमि प्रक्रियाएं भी उसी डेटाबेस के साथ बातचीत कर रही हैं।
  • प्रोजेक्ट 3 एक लाइब्रेरी है जिसमें विस्तारित डेटाबेस कनेक्शन ऑब्जेक्ट्स और अन्य उपयोगिता फ़ंक्शन शामिल हैं।

प्रोजेक्ट 1 और 2 लाइब्रेरी कोड पर निर्भर करता है।

मैं परियोजनाओं को तीन अलग-अलग भंडारों में विभाजित करना चाहता हूं ताकि उन्हें स्वतंत्र रूप से विकसित किया जा सके।

पहली दो परियोजनाओं को व्यवस्थित करने का सबसे अच्छा तरीका क्या है, इसलिए वे पुस्तकालय पर निर्भर हैं लेकिन पुस्तकालय की अपनी प्रतिलिपि को उनके स्रोत पेड़ में नहीं चाहिए?

क्या मुझे पुस्तकालय को एक पीईएआर पैकेज में परिवर्तित करना चाहिए और उस पैकेज को सिस्टम को व्यापक रूप से स्थापित करना चाहिए। या यह बेहतर है कि परियोजनाओं 1 और 2 कुछ अर्थों में 'निर्माण/तैनात' हैं और उस बिल्ड चरण के दौरान लाइब्रेरी की एक प्रति शामिल करें। यह दृष्टिकोण फ़िंग/PHP-Maven जैसे किसी प्रकार के निर्माण प्रबंधन टूल का उपयोग करेगा।

+1

आप किस एसएमएम सॉफ्टवेयर का उपयोग कर रहे हैं? प्रतीकात्मक लिंक के बारे में क्या? – hakre

उत्तर

3

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

यदि आप उपversण का उपयोग कर रहे हैं, तो आप अपने आवेदन में लाइब्रेरी कोड को शामिल करने के लिए बाहरी का उपयोग कर सकते हैं और इसे एक निश्चित संशोधन पर लॉक कर सकते हैं। इसे अपडेट करना केवल संस्करण संख्या को बदलने और कोड को अपडेट करने के लिए एक संपत्ति को संपादित करने के बारे में है।

अन्य संस्करण नियंत्रण उपकरण समान कार्यक्षमताओं की पेशकश कर सकते हैं। सिम्फनी 2 जैसी कुछ परियोजनाओं में निर्भरताओं का प्रबंधन करने के लिए एक स्क्रिप्ट भी शामिल है, हालांकि वे केवल गिट का समर्थन करते हैं।

+0

वास्तव में यह एक उचित बिंदु है। शायद अब के लिए सबसे अच्छा समाधान। इसके लायक होने के लिए मैं वास्तव में Mercurial का उपयोग कर रहा हूँ। लाइब्रेरी का नवीनतम संस्करण जो कुछ भी हो, उसके अधीन न होने के बारे में बिंदु लें। – freshnewpage

+0

इसके लिए Mercurial का उपयोग करने पर एक धागा है। लगता है कि एक एक्सटेंशन उपलब्ध है। http://stackoverflow.com/questions/217523/can-i-emulate-svnexternals-using-mercurial –

1

शायद क्योंकि मैं एक मेवेन उपयोगकर्ता हूं, मैं प्रोजेक्ट 3 को प्रोजेक्ट 1 और प्रोजेक्ट 2 की निर्भरता के रूप में घोषित करना पसंद करूंगा और निर्माण प्रबंधन उपकरण और निर्भरता रिज़ॉल्वर (अन्य चीजों के साथ) के रूप में मेवेन का उपयोग करना पसंद करूंगा। @ लुई-फिलिप ह्यूबरडेउ द्वारा इंगित संस्करण समस्या संस्करणों का उपयोग करने से रोक सकती है और निर्भरताओं को संस्करण विशिष्ट होने की घोषणा कर सकती है: यानी, विकास परियोजनाओं के लिए प्रोजेक्ट 3-1.0-एसएनएपीएसएचओटी पर निर्भर हो सकता है और रिलीज के लिए निर्भरता प्रोजेक्ट 3-1.0-रिलीज हो जाएगी । इस तरह तीन परियोजनाएं स्वतंत्र रूप से विकसित हो सकती हैं। कलाकृतियों का संस्करण और तैनाती मैवेन द्वारा किया जा सकता है। बाद में, यदि आपको इसकी आवश्यकता है, तो आप एक सीआई सर्वर का उपयोग कर सकते हैं, जैसे हडसन या ट्रैविस सीआई।

+0

मैं ज्यादातर हार्ड ड्राइव पर एक निश्चित स्थान पर इंगित करने का जिक्र कर रहा था। सामान्य प्रतिबिंब लोगों में PHP है। –

+0

हां, मैं उस सामान्य प्रतिबिंब से निपट रहा हूं सी #: पी हम विरासत सी # में svn बाहरी का उपयोग कर रहे हैं लेकिन मुझे इसे बदलना अच्छा लगेगा। – Diego

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