2012-04-26 15 views
8

तो मेरे पास दो गिट रेपो हैं। पहला हमारा ढांचा है (सोचें डीबी अमूर्तता, कार्य) और फिर हमारी नई परियोजना के लिए एक और गिट रेपो।गिट भंडार कैसे घोंसला करें; लाने और विलय

मैं परियोजना Git में ढांचे Git रेपो शामिल करना चाहते हैं, और GitHub सहायता के अनुसार, इस काम करना चाहिए:

cd /project 
git remote add framework git://github.com/username/Framework.git 
git fetch framework 
git merge framework/master 

समस्या है, जब मैं मर्ज करते हैं, यह सब कुछ से लाता है सभी फाइलें ढांचे और बस उन्हें परियोजना की जड़ में डंप। इसके बजाए, हमारे पास /project/framework/ जैसी बाल निर्देशिका में विलय की गई ढांचे की फाइलें कैसे हो सकती हैं?

उत्तर

20

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

एक उदाहरण इस प्रकार दिखाई देंगे:

$ git clone git://github.com/username/project.git 
$ cd project 
$ git submodule add git://github.com/username/framework.git framework 
$ git commit -m "added framework submodule" 

आप submodules के साथ एक भंडार क्लोनिंग रहे हैं, तो आप --recursive विकल्प का उपयोग करने की जरूरत है:

$ git clone --recursive git://<repository-with-submodules>.git 

या वैकल्पिक रूप से, आप नियमित रूप से क्लोन कर सकते हैं और फिर चलाएं:

$ git submodule init 
$ git submodule update 

लिंक किए गए दस्तावेज़ को पढ़ें (और git submodule --help) अधिक जानकारी के लिए।

परिवर्तन submodule के लिए बना रहे हैं, तो आप उन्हें में इस तरह लाने:

# first update the submodule just like any other git repository 
$ cd project/framework 
$ git pull 

# now you have to record the new commit in the parent repository 
$ cd .. 
$ git commit -m "updated framework submodule" 

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

यदि आप framework सबमिशन के भीतर परिवर्तन करते हैं, तो आप फिर से git push जैसे किसी भी अन्य भंडार के साथ करेंगे। आपको पैरेंट मॉड्यूल में नया संशोधन करना होगा।

+0

बिल्कुल सही, इसलिए जब फ्रेमवर्क में परिवर्तन किए जाते हैं, तो अब मैं उन्हें प्रोजेक्ट में कैसे खींचूं कि यह एक मॉड्यूल है? साथ ही, अगर मैं प्रोजेक्ट के बजाय फ्रेमवर्क में बदलाव करता हूं, तो मैं उन्हें वापस फ्रेमवर्क गिट रेपो में कैसे दबा सकता हूं? – Justin

+0

मैंने अपना जवाब अपडेट कर दिया है। – larsks

+0

एक छोटा सा नोट। सबमिशन हेड अलग है इसलिए आपको सबमिशन में बदलाव करने के बारे में सावधान रहना होगा। एक शाखा बनाएं (या शाखा में स्विच करें), परिवर्तन करें, प्रतिबद्ध करें और फिर धक्का दें। – GoZoner