2010-02-12 18 views
5

मेरे पास एक मुख्य रेपो (रेपो 1) है जिसके साथ मैं काम करता हूं। मेरे पास एक और रेपो (रेपो 2) है जिसे पहले व्यक्ति में फिट करने की आवश्यकता है और मुझे यकीन नहीं है कि मैं उन्हें एक ही फ़ोल्डर में कैसे रख सकता हूं। विचार यह है कि मेरे पास एक मानक कोडबेस है जिसे मुझे प्रत्येक प्रोजेक्ट में चाहिए - फिर भी प्रत्येक प्रोजेक्ट यह स्वयं का गिट रेपो है।आप दो गिट रेपो कैसे जोड़ते हैं?

/project 
    /.git(repo 2) 
    /.git(repo 1) 
    /repo_2_sub 
     /repo_2_sub_sub 
      /repo_1_sub_sub 
    /repo_1_sub 
     /repo_1_sub_sub 
     /repo_2_sub_sub 

फाइलों में से कोई भी ओवरलैप नहीं है - लेकिन कुछ फ़ोल्डर संरचनाएं होती हैं। तो कभी-कभी एक रेपो से कुछ फ़ोल्डर्स अन्य रेपो में होंगे।

मैं कैसे काम कर सकते हैं तो इन दो खजाने पूरा codebase का निर्माण?

अद्यतन

दोनों Git रेपोस एक ही रूट प्रोजेक्ट फ़ोल्डर स्तर में मौजूद हैं। वे उपरोक्त दिखाए गए अनुसार एक-दूसरे के माध्यम से पीछे और आगे बढ़ने के बाद से वे सबड्यूल्यूल नहीं हो सकते हैं। वे अलग फ़ोल्डर्स नहीं हैं।

अद्यतन 2

प्रतीक्षा, हो सकता है इस तुलना में आसान मैंने सोचा है। क्या आप एक मानक कोडेबेस रेपो क्लोन कर सकते हैं और फिर अपनी प्रोजेक्ट की एक नई शाखा बना सकते हैं और फिर उस शाखा को हर बार कोडबेस रीपो के साथ विलय करते रहें?

+1

यहां अपडेट और उत्तरों के माध्यम से पढ़ना, ऐसा लगता है कि सही जवाब दो अलग-अलग परियोजनाओं को एक सैनिअर निर्भरता संरचना में अलग करना है। – Novelocrat

+0

हाँ, मुझे ऐसा लगता है। – Xeoncross

उत्तर

1

प्रतीक्षा, हो सकता है यह मैं सोचा की तुलना में आसान है। क्या आप एक मानक कोडबेस रेपो क्लोन कर सकते हैं और फिर अपनी परियोजना है और एक नई शाखा बना सकते हैं और कोडबेस रीपो प्रत्येक बार बदलते समय उस शाखा को विलय करना जारी रखें?

आप ऐसा कर सकते हैं। मेरे पास एक प्रोजेक्ट भी है जहां मैं इसे इस तरह कर रहा हूं। अधिकांश कोड सभी सबप्रोजेक्ट्स के लिए समान हैं। मैं उन परियोजनाओं को रखने के लिए प्रत्येक प्रोजेक्ट के लिए एक नई शाखा बनाता हूं जो केवल उस परियोजना से अलग हो। मैं नियमित रूप से master शाखा को अन्य शाखाओं में विलय करता हूं।

आप मुख्य भंडार के क्लोन भी बना सकते हैं। फिर आप अपनी प्रत्येक परियोजना में शाखा से master शाखा में परिवर्तनों को मर्ज करेंगे।

+0

ऐसा लगता है कि ऐसा कुछ ऐसा करने का सबसे आसान तरीका है क्योंकि आपको प्रत्येक टीम के सदस्य और प्रत्येक प्रोजेक्ट के लिए एक जटिल सेटअप की व्याख्या करने की आवश्यकता नहीं है। इसके अलावा यह त्रुटि के लिए कम प्रतीत होता है। – Xeoncross

2

उपयोग git submodule

अद्यतन:

मानक कोड आधार है कि सभी रेपोस का एक हिस्सा होने की जरूरत है एक अलग अलग Git भंडार हो गया है।

git submodule add <repo_nick_name> <repo_path> 

यह एक करने के लिए है कि रेपो जोड़ देगा। क्लोनिंग और पुशिंग पर, केवल .gitmodules फ़ाइल और रेपो पर हैश को धक्का दिया जाएगा/क्लोन किया जाएगा।

git submodule init 

और

git submodule update 

क्रमशः initializes और अद्यतन करता है दूरस्थ submodule रेपोस।

विस्तृत जानकारी के लिए, एक ही पर git community book documentation on git submodules और/या स्कॉट chacon के स्क्रीनकास्ट जाँच करें।

+0

समस्या यह है कि वे एक ही आधार निर्देशिका में परियोजनाएं हैं। – Xeoncross

+0

यह कोई समस्या नहीं होनी चाहिए। मॉड्यूल के समान फ़ोल्डर में submodules मौजूद हैं। –

2

संपादित करें: आदेश, दो .git निर्देशिका के लिए जब आप उन्हें init, वहाँ कुछ अतिरिक्त काम किया जाएगा में। जब आप init, करते हैं:

git --git-dir=.git1 --work-tree=. init 
git --git-dir=.git2 --work-tree=. init 

अब आपके पास एक ही निर्देशिका में दो गिट डीआईआर हैं। बहुत सुंदर नहीं है। इस बिंदु पर, सुनिश्चित करें कि आपके पास .git1 और .git2 दोनों हैं .gitignores, क्योंकि उन्हें डिफ़ॉल्ट रूप से अनदेखा नहीं किया जाता है। इसके अतिरिक्त, आपके द्वारा चलाए जाने वाले प्रत्येक गिट कमांड में यह भी निर्दिष्ट करने के लिए --git-dir तर्क होना चाहिए कि आप किस रिपोजिटरी के साथ बातचीत कर रहे हैं। आप इसके लिए उपनाम सेट कर सकते हैं।

के बाद से वे एक ही आधार निर्देशिका में कर रहे हैं और submodules काम नहीं करेगा, तो आप दोनों के अंदर '.gitignore' फ़ाइलों डाल सकता है '.git/जानकारी/बहिष्कृत' निर्देशिका। उन्हें .git/info/extrae में डालने से यह सुनिश्चित हो जाता है कि अन्य रेपो बहिष्करण नहीं उठाता है।

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

देखें: gitignore

+0

आपके पास वास्तव में दो '.git' फ़ोल्डर्स नहीं हो सकते हैं - मैंने उन्हें यह दिखाने के लिए वहां रखा है कि मुझे लगता है कि मैं क्या चाहता हूं *। – Xeoncross

+0

अच्छा, आप कर सकते हैं, यह कुछ अतिरिक्त काम लेता है। मेरा संपादन देखें। – bobDevil

+0

पागल आदमी। मुझे नहीं लगता कि मैं इस मार्ग पर जाऊंगा क्योंकि ऐसा लगता है कि ऐसा हैक। इसके अलावा, इस तरह टीम इंस्टॉलों का एक समूह स्थापित करने के लिए दर्द होगा। यह जानकर बहुत बढ़िया काम करता है! – Xeoncross

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