2016-03-26 8 views
10

के अंदर गिट रेपो को बनाए रखना मेरे पास एक गिट रेपो है जिसमें AngularJS वेब ऐप शामिल है।एक और गिट रेपो

यह जो घूंट कार्य के द्वारा बनाई गई हो जाता है एक सबफ़ोल्डर कहा जाता है का निर्माण किया है। मैं Azure पर तैनात कर रहा हूं, इसलिए यह सीधे मेरी बिटबकेट निर्देशिका से जुड़ा हुआ है।

मैं एक अलग Git रेपो जहाँ से Azure अनुप्रयोग तैनात किया जा रहा है के रूप में निर्माण फ़ोल्डर बनाना चाहते हैं। मैं इसे गिट में कैसे प्राप्त करूं ??

+0

मैं एक चुपके संदेह इंजीनियरिंग पर कुछ पर यहाँ जा रहा है है, लेकिन आप Git ध्यान देना चाहिए [submodules] (https://git-scm.com/book/en/v2/Git- टूल्स-सबमोड्यूल) –

+1

संभावित डुप्लिकेट [गिट रेपो को अन्य गिट रेपो के अंदर बनाए रखें] (http://stackoverflow.com/questions/4659549/maintain-git-repo-inside-another-git-repo) –

उत्तर

16

आप की तरह कई विकल्प हैं:

  • submodule
  • सबट्री

Submodulesविदेशी खजाने की अनुमति देते हैं स्रोत पेड़ के एक समर्पित उपनिर्देशिका के भीतर एम्बेडेड होने के लिए, हमेशा एक विशेष प्रतिबद्धता पर ध्यान दिया जाता है।


git submodule

उप परियोजनाओं के लिए अपने बड़े परियोजना तोड़ के रूप में आप अब तक किया था।
अभी सेवा का उपयोग मुख्य परियोजना आप के लिए प्रत्येक उप परियोजना जोड़ें: आप init और इसे अद्यतन करने के लिए है

git submodule add <url> 

एक बार प्रक्षेपित अपने रेपो मुन्ना जोड़ा जाता है।

git submodule init 
git submodule update 

गिट 1.8 के रूप में।2 नया विकल्प --remote

git submodule update --remote --merge 

होगा fetch प्रत्येक submodule में नदी के ऊपर से नवीनतम परिवर्तन, merge them in, और check out submodule के नवीनतम संशोधन जोड़ा गया है।

the docs के रूप में वर्णन:

--remote

यह विकल्प अद्यतन आदेश के लिए ही मान्य है। सबमिशन को अद्यतन करने के लिए सुपरप्रोजेक्ट के रिकॉर्ड किए गए SHA-1 का उपयोग करने के बजाय, सबमिशन की रिमोट-ट्रैकिंग शाखा की स्थिति का उपयोग करें।

यह प्रत्येक सबमिशन में गिट पुल चलाने के बराबर है।


हालांकि, मैं एक कैसे धक्का जो कोड जनक परतों के साथ साझा को प्रभावित करता है सी में बग समाधान के परिदृश्य में प्रतिबद्ध हैं?

फिर: submodule का उपयोग कर अपनी सामग्री के भाग के रूप में अपने मुख्य परियोजना के अंदर अपने कोड आ जाएँगे। स्थानीय रूप से फ़ोल्डर के अंदर या इसे सबमिशन के हिस्से के रूप में रखने के बीच अंतर यह है कि सबमिशन में सामग्री को एक अलग स्टैंडअलोन रिपोजिटरी में प्रबंधित (प्रतिबद्ध) किया जाता है।


यह एक अन्य प्रोजेक्ट के अंदर सबमिशन - प्रोजेक्ट का एक उदाहरण है जिसमें प्रत्येक प्रोजेक्ट एक स्टैंडअलोन प्रोजेक्ट है।

enter image description here


git subtree

Git सबट्री आप बहुतके लिए इसी तरह एक दूसरे से

की एक उप-निर्देशिका के रूप में किसी भी भंडार डालने के लिए अनुमति देता है 0 लेकिन मुख्य अंतर यह है कि आपका कोड प्रबंधित किया जाता है। Submodules में सामग्री एक अलग रेपो के अंदर रखा गया है और वहां प्रबंधित किया जाता है जो आपको इसे कई अन्य repos के लिए क्लोन करने की अनुमति देता है।

subtree जड़ परियोजना के हिस्से के रूप में और एक अलग परियोजना में नहीं सामग्री के प्रबंधन है।

इसे लिखने के तरीके को लिखने और इसे समझने के तरीके के बारे में लिखने के बजाय आप बस इस उत्कृष्ट पोस्ट को पढ़ सकते हैं जो इसे समझाएगा।

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

+0

क्या https://stackoverflow.com/questions/47008290/how-to-make-outer-repository-and-embedded-repository-work-as-common-standalone- में वर्णन के रूप में submodul और subtree के बिना कोई अन्य समाधान है? आर? – Mithril

5

उस Git submodule या सबट्री साथ ऐसा कर सकते हैं, मैं कारण इस तरह का के लिए submodule का उपयोग करें।

https://git-scm.com/docs/git-submodule

उदाहरण:

/mainrepository 
/mainrepository/subrepository 

cd /mainrepository/subrepository; 
git init . 
cd ../ 
git submodule add ./subrepository 

then open seperate remote repository in bit bucket then 
cd into ./subrepository 
git remote add origin https://bitbucket.com/path/to/subrepository.git 

मूल रूप से यह सब के बारे में है।

मैं इसे submodules की तुलना में अधिक उन्नत है उपतरू के बारे में कोई विस्तृत जानकारी जो मैं जानता हूँ है,। लेकिन यदि आपकी ज़रूरतें मूल रूप से submodules के साथ मेल खाते हैं तो इसे बनाए रखना आसान है।

+0

मुझे शाखाएं चाहिए आंतरिक रेपो की आंतरिक शाखाओं को इंगित करने के लिए बाहरी रेपो ...... मैं यह –

+0

कैसे प्राप्त करूं, मुझे लगता है कि यह संभव नहीं है, क्योंकि मुख्य रेपो और सबमिशन 2 अलग-अलग भंडार हैं, इसलिए ब्रांचिंग भंडार पर आधारित है, आप प्राप्त नहीं कर सकते इस। लेकिन जब आप एक सबमिशन के रूप में रेपो जोड़ते हैं तो मुख्य रेपो सबमिशन प्रतिबद्ध हैश को ट्रैक कर रहा है, इसलिए जब आप किसी भी प्रतिबद्धता को जोड़ते हैं तो सबमिशन में जो भी शाखा आप मुख्य रेपो में देखेंगे, वहां सबमिशन के लिए अंतिम प्रतिबद्ध हैश बदल जाएगा। तो मूल रूप से मुख्य शाखा भी सबमिशन का पालन करता है। लेकिन यह शाखाकरण के बारे में नहीं है। तो आपको इसकी आवश्यकता क्यों है? क्या कोई विशेष दृष्टिकोण है। – FZE