2011-03-28 6 views
7

मैं पनडुब्बियों के साथ गिट का उपयोग करता हूं, और मुझे यह पता लगाने में कठिनाई होती है कि मेरी फाइलें व्यवस्थित करने के तरीके को कैसे समझें। मैं PHP में विकसित हूं, और यूनिट परीक्षण का उपयोग करता हूं। तो अभी, मैं प्रत्येक मॉड्यूल के लिए इस संगठन का उपयोग करें:गिट और सबमिशन का उपयोग करना, एक अच्छी फ़ोल्डर संरचना क्या है?

  • src/
  • परीक्षण/

यह एक शानदार विचार की तरह लगता है, लेकिन समस्या यह है कि जब मैं एक "Git submodule करना "एक प्रोजेक्ट में जोड़ें, मेरे पास वह पथ होगा: प्रोजेक्ट/मॉड्यूल/समाचार/src/index.php

src/फ़ोल्डर वास्तव में समस्याग्रस्त है।

क्या मुझे बस अपनी सभी फाइल मॉड्यूल रूट में रखना चाहिए, और स्रोत में मिश्रित परीक्षण/फ़ोल्डर है? मेरे लिए जो बुरा लगता है। तुम क्या कर रहे हो ?

संपादित करें: src/फ़ोल्डर autoload की वजह से समस्याग्रस्त है। मुझे अपने सभी वर्ग नाम में "src" नहीं रखना चाहिए ...

+0

संपादन के बारे में प्रश्न: समस्या यह है कि आप फ़ोल्डर संरचना से मेल खाने वाले वर्ग नाम चाहते हैं। प्रत्येक मॉड्यूल के पास भी अपने स्वयं के परीक्षण होना चाहिए और यह एक समस्या है क्योंकि आप गिट submodules के साथ शामिल नहीं कर सकते हैं (जैसे BarModule/src => मॉड्यूल/बार)? (बस जांच कर रहा हूं कि मुझे आपकी आवश्यकताएं मिलती हैं) – edorian

उत्तर

4

आपका फ़ोल्डर लेआउट अधिकतर अप्रासंगिक है जब तक ऑटोलोडर आपकी फ़ाइलों को किसी भी तरह से ढूंढ सकता है। यदि आप कक्षा स्रोतों को उनकी स्रोत फ़ाइलों में मैप करने के लिए पीयर सम्मेलन का उपयोग कर रहे हैं, तो आप पथ निर्देशिका में src निर्देशिका जोड़ सकते हैं या दूसरे ऑटोलोडर को ढेर कर सकते हैं। तब आपको कक्षा के नामों में src जोड़ने की ज़रूरत नहीं है।

पीईआर सम्मेलन का विकल्प फाइलों और कक्षाओं के बीच एक स्थिर मैपिंग का उपयोग करना होगा। a tool that can automatically generate such an autoloader for you at GitHub है।

स्थिर ऑटोलोडर दृष्टिकोण PHP Project Wizard में भी उपयोग किया जाता है। वह टूल your phpunit config और build file to connect your project with Jenkins CI सहित स्रोत और परीक्षण फ़ोल्डर्स बनाएगा। यह एक सुविधाजनक पैकेज है।

submodules सहित, उन्हें एक lib या ext फ़ोल्डर में डालने पर विचार करें। phpdox project at GitHub में यह दिखने का एक उदाहरण कैसा पाया जा सकता है। सुनिश्चित करें कि आप विभिन्न ऑटोलोडर को फिर से शामिल करने के तरीके को देखने के लिए main bootstrap file पर भी देखें।

+0

आप सही हैं, सिवाय इसके कि मेरे पास एक परियोजना में 30+ मॉड्यूल हो सकते हैं। तो मैं 30+ autoloaders ढेर करना होगा, यह भयानक नहीं होगा? मैं phpdox प्रोजेक्ट में पहले से ही (और सहयोग) जानता हूं;) लेकिन यह वही प्रकार का सबमिशन नहीं है। मेरे मामले में एक सबमिशन एक WordPress प्लगइन की तरह होगा। इसके अलावा यह प्रोजेक्ट PHP 5.2 :( – FMaz008

+0

@ FMaz008 क्यों नहीं है, आप केवल TheSeer के PHPAB का उपयोग क्यों नहीं करते हैं और इसे अपने 30 submodules समेत पूरी परियोजनाओं पर फिर से शुरू करने दें और फिर उस एकल ऑटोलोडर का उपयोग करें? आईआईआरसी PHPAB के पास 5.2 के लिए टेम्पलेट भी है, इसलिए संस्करण एक मुद्दा नहीं होना चाहिए। – Gordon

3

इस समस्या का सामना करते समय मैंने क्या किया था विक्रेताओं नामक फ़ोल्डर बनाना और उसमें सभी सबोड्यूल को रखना था। फिर मैंने उन साइटों के सापेक्ष पथों का उपयोग करके सिग्नलिंक किया जो मैं उन्हें अपने कोड में चाहता था। आप symlinks को गिट करने के लिए प्रतिबद्ध कर सकते हैं और जब भी वे भंडार खींचते हैं तब भी वे काम करेंगे। बेशक यह केवल तभी काम करता है जब आप * निक्स आधारित ओएस का उपयोग कर रहे हों।

उदाहरण के लिए:

modules/ 
vendor/module1/src/ 

तो (मॉड्यूल निर्देशिका से) की तरह सांकेतिक रूप से लिंक हो सकता है:

ln -s ../vendor/module1/src module1 

सुनिश्चित नहीं हैं कि यह आपकी समस्या का हल है या नहीं है।

+0

लेकिन क्या होगा अगर कुछ डेवलपर विंडोज का उपयोग कर रहे हों? सिम्लिंक अनुपलब्ध हैं ... – FMaz008

+0

विंडोज के कुछ संस्करणों में सिम्लिंक की तरह कुछ है, तो आप उन्हें आजमा सकते हैं। मैं विंडोज़ पर विकसित नहीं हूं इसलिए मैंने कभी कोशिश नहीं की है। – MitMaro

0

मेरे पास एक अलग मॉड्यूल में परीक्षण नहीं होंगे। इसे एक ही भंडार में रखें।

+1

मैंने कभी भी अपनी परीक्षा को एक अलग भंडार में रखने की योजना नहीं बनाई है। सभी मॉड्यूल अपने परीक्षणों के साथ बंडल किए जाते हैं। – FMaz008

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