2011-04-22 14 views
5

के साथ गिट प्रोजेक्ट्स हमारे पास उन कार्यों में कई परियोजनाएं हैं जो उनके अधिकांश कोड/कॉन्फ़िगरेशन फ़ाइलों को साझा करती हैं। हमारे द्वारा उपयोग किए जाने वाले ढांचे में कुछ निर्देशिका और फ़ाइल निर्भरताएं हैं जो हमें सीमित करती हैं कि हम आम कोड को कितना अलग कर सकते हैं। उदाहरण के लिए, 'आम', 'PROJECTA', और 'projectB' के बीच हम हो सकता है:सामान्य कोड

/PROJECTA

  • /shared_dir1
    • common1
    • fileA1
    • fileA2
  • /common_dir2
    • common2
  • /dir3
    • fileA3
  • common3
  • fileA4

/projectB

  • /shared_dir1
    • common1
    • fileB1
  • /common_dir2
    • common2
  • /dir3
    • fileB2
    • fileB3
  • common3
  • fileB4
  • fileB5

हम वर्तमान में 3 Git परियोजनाओं के साथ इस का प्रबंधन: 'आम', 'PROJECTA', और 'projectB', के साथ आम फाइलों में 'आम' बाहर अलग कर दिया और अपनी विशिष्ट परियोजनाओं में परियोजना विशिष्ट फाइलें। 'प्रोजेक्ट ए' और 'प्रोजेक्टबी' में सभी सामान्य डीआईआर और प्रत्येक साझा डीआईआर के तहत सभी सामान्य फाइलों के लिए प्रविष्टियों के साथ एक .gitignore है। उस परियोजना में एक स्क्रिप्ट प्रतियां 'आम' है जिसमें आप काम करना चाहते हैं और विकास वहां किया जाता है। एक बार परिवर्तन हो जाने के बाद, एक और स्क्रिप्ट सभी आम डीआईआर और आम फाइलों को 'आम' में वापस कॉपी करती है। 'सामान्य' और परियोजना में परिवर्तन को 'गिट स्थिति' के माध्यम से देखा जा सकता है।

यह स्पष्ट रूप से 'सामान्य' के बीच प्रतिलिपि बनाने के अपने सिरदर्द के साथ आता है, रखने के लिए सटीक, और 'प्रोजेक्ट ए' और 'प्रोजेक्टबी' के भीतर शाखाओं को स्विच करना। चूंकि हम 'प्रोजेक्टसी-एफ' की योजना बनाते हैं, हालांकि, यह दृष्टिकोण अच्छा लगता है क्योंकि हम एन परियोजनाओं में आम परिवर्तनों को विलय करने से बच सकते हैं।

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

+0

क्या तुमने कभी अपनी परियोजना प्रबंधन करने के लिए एक तरीका खोज निकाला है:

यहां पर कुछ लिंक कर रहे हैं? – maguirre

उत्तर

2

क्या आपने गिट सबट्री माना है?

कुछ इस तरह किया जा सकता है:

git remote add common git://server/common.git 
git fetch common 
git checkout -b common_branch common/master 
git checkout master 
git read-tree --prefix=common/ -u common_branch 

नीचे दिए गए लिंक में और अधिक पढ़ें:

http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

http://progit.org/book/ch6-7.html

1

यदि आप में साझा कोड डाल करने के लिए तैयार हैं एक अलग गिट भंडार, आपको submodules गिट में रुचि हो सकती है। एक सबमिशन आपको एक अन्य रेपो के भीतर एक गिट रेपो शामिल करने की अनुमति देता है।

+0

उन्होंने submodules का उल्लेख किया - 'submodules पृथक्करण की कमी के कारण अनावश्यक प्रतीत होता है, जब तक हम उनमें से बड़ी संख्या में – manojlds

+0

आह नहीं किया, मैं उस अंतिम अनुच्छेद पर चमकदार होना चाहिए ... वैसे भी, मुझे लगता है कि submodules अभी भी एक अच्छा समाधान है समस्या वह वर्णन करता है। –

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