2011-11-17 9 views
8

के साथ कोड को सबसे अच्छी तरह से साझा करने के लिए कैसे करें मेरे पास कई अलग-अलग परियोजनाएं हैं जो कुछ सामान्य कोड साझा करती हैं। गिट में और विशेष रूप से स्मार्टगिट में इसे पूरा करने के लिए सबसे अच्छा अभ्यास क्या है?स्मार्टगिट

  • एक विशाल भंडार

  • प्रत्येक परियोजना के लिए भंडार है, और साझा कोड के लिए भंडार है में सब कुछ है, और Git Submodules का उपयोग करें।

  • प्रत्येक प्रोजेक्ट के लिए एक संग्रह है, और साझा कोड के लिए एक भंडार है, और Git Subtrees का उपयोग करें। क्या कोई मुझे बता सकता है कि यह SmartGit द्वारा समर्थित है, और यह कैसे प्राप्त किया जा सकता है?

इन तरीकों के साथ संभावित नुकसान क्या हैं, और स्मार्टगिट के साथ सर्वोत्तम प्रथाएं क्या हैं?

उत्तर

6

मैं करने के लिए सलाह देते हैं या तो सभी परियोजनाओं के लिए एक भंडार है या का उपयोग submodules: अपने सामान्य कोड बारीकी से अपनी परियोजनाओं, refactorings और (एपीआई) के परिवर्तन के अन्य प्रकार के साथ एक साथ टाई रहता है तो

  • अपने सामान्य कोड के लिए आपकी सभी परियोजनाओं में बदलाव की आवश्यकता होगी, इसलिए यदि आप में एक प्रतिबद्धता के साथ सब कुछ कर सकते हैं तो एक भंडार, आप संस्करण नियंत्रण (गिट के साथ) करने में कम समय व्यतीत करेंगे। उदाहरण के लिए, गिट सबमोड्यूल बस शाखा के सिर को इंगित नहीं कर सकता है, बल्कि केवल एक विशिष्ट प्रतिबद्धता के लिए। नवीनतम प्रतिबद्धता में हमेशा अपने सबोडोड्यूल को अपडेट करने के लिए यह बोझिल हो सकता है।

  • अपने सामान्य कोड अधिक एक स्वतंत्र पुस्तकालय की तरह है और यह है कि पुस्तकालय के नए संस्करणों के साथ समय-समय पर अपनी परियोजनाओं को अद्यतन करने के लिए पर्याप्त है, submodules बेहतर विकल्प होगा। वे स्मार्टगिट के साथ अच्छी तरह से समर्थित हैं और अलग-अलग भंडार आपको देते हैं उदा। बाद में दूसरों के साथ अपने कुछ भंडारों को साझा करने की लचीलापन।

  • स्मार्टगिट में सबट्री के लिए कोई विशेष समर्थन नहीं है।

+0

+1 में मदद करता है, बहुत उपयोगी है। क्या पहले विकल्प के लिए कोई नुकसान है? जब भी मैं अपनी परियोजनाओं में से एक का संस्करण जारी करता हूं, तो क्या मैं बस पूरी रिपोजिटरी को शाखाबद्ध कर दूंगा? – Eric

+0

पूरे भंडार को ब्रांच करना अच्छी तरह से काम करेगा, गिट उदा। शाखा प्रोजेक्ट जैसे 'प्रोजेक्ट 1/शाखा 1' (आंतरिक रूप से:/refs/head/project1/branch1) की अनुमति देता है। – mstrap

+0

एक बड़े भंडार के साथ मुख्य नुकसान यह है कि इसे बाद में अलग नहीं किया जा सकता है (AFAIK)। परियोजनाओं की संख्या के बारे में स्केलेबिलिटी में कोई समस्या नहीं होगी क्योंकि गिट बड़े भंडारों के लिए भी कुशल है। हालांकि SmartGit के ताज़ा समय बढ़ते काम के पेड़ के आकार के साथ बढ़ेगा (ताज़ा करने की आवश्यकता अक्सर होती है)। बस आपको एक विचार देने के लिए: यदि आपके एक बड़े भंडार में लगभग 10 के फाइलें होंगी, तो आपको इसके बारे में परेशान करने की आवश्यकता नहीं है। – mstrap

1

मैं अलग-अलग परियोजनाओं का भी उपयोग करता हूं। हमने बड़ी फाइलों और गिट + स्मार्टगिट के साथ मेमोरी के मुद्दों को मारा है। मैं इस समय syntevo के साथ संवाद में हूँ। स्मार्टगिट के नवीनतम संस्करण के साथ, टिप्पणियों की प्रतिलिपि बनाने की क्षमता बहुत उपयोगी है। उम्मीद है कि यह

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