एक और git रेपो के अंदर git रेपो बनाए रखें


124

यहाँ मैं क्या चाहूँगा:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

मैं सभी REPO-A की सामग्री को REMOTE-A और केवल REPO-B को REMOTE-B में धकेलने में सक्षम होना चाहता हूं ।

मुमकिन?

जवाबों:


104

ऐसा लगता है कि आप गिट सबमॉड्यूल का उपयोग करना चाहते हैं ।

Git इस समस्या को सबमॉड्यूल का उपयोग करके संबोधित करता है। सबमॉड्यूल्स आपको एक Git रिपॉजिटरी को दूसरे Git रिपॉजिटरी के उपनिर्देशिका के रूप में रखने की अनुमति देता है। इससे आप अपने प्रोजेक्ट में एक और रिपॉजिटरी क्लोन कर सकते हैं और अपने कमिट्स को अलग रख सकते हैं।


19
बिल्कुल नहीं: यह रेपो की सभी सामग्री को धक्का नहीं देगा: केवल ए प्लस बी का संदर्भ। लेकिन मैं आपके उत्तर की आलोचना नहीं करता, मैं ओपी के प्रश्न को दोबारा पढ़ते समय बहुत अधिक वही लिख रहा था;)
वॉनसी

1
यह सबमोडुल्स के लिए उपयोग का मामला है। REPO-A और REPO-B को अपने स्वयं के कमिट, मूल, इतिहास, आदि के साथ अपने आप में गिट रेपोस के रूप में माना जाता है
डेमियन विल्सन

2
इसलिए यदि मैं वह सही पढ़ रहा हूं, तो क्या मैं स्वतंत्र रूप से एक सबमॉड्यूले-डी रेपो की जांच कर सकता हूं, जो मुझे इसमें मिल रहा है? मैं पहले से मौजूद रेपो को कैसे ले जाऊंगा और इसे किसी अन्य प्रोजेक्ट में सबमॉड्यूल के रूप में संदर्भित करूंगा?
बजे

मैं ओपी के रूप में बिल्कुल वैसा ही समाधान नहीं ढूंढ रहा था, और मैं औसतन यह मानता हूं कि यह संभवतः इसी तरह के प्रश्न के उत्तर के लिए अधिक खोजा गया है: "git REPO-B को git REPO-A के भीतर संदर्भ या पूर्ण प्रति एम्बेड करता है। जीईपी रिपो-बी? "
जया

64

मैंने हमेशा दो अलग-अलग और अलग-अलग रिपॉजिट बनाए रखने के लिए सीमलिंक का इस्तेमाल किया है।


8
git सबमॉड्यूल और git उप-वृक्ष कितना भ्रामक लगता है, इसके लिए यह एक मान्य उत्तर है।
ट्रेवर हिक्की

यह कई दूरस्थ रिपॉजिटरी से एक आवेदन को इकट्ठा करने के लिए भी बहुत उपयोगी है
गेराल्डस्कॉट

22
दो अलग और विशिष्ट रेपो को बनाए रखने के लिए, रेपो बी को रेपो ए में रखना ठीक नहीं होगा और रेपो ए में केवल रेपो बी जोड़ना होगा .gitignore?
Fabien Snauwaert

1
मैं ऐसा करने के बारे में सोच रहा था जो फेबियन ने सुझाव दिया है, क्या इसे इस तरह से करने में कोई समस्या है?
Theonlygusti

1
मैं git रिपॉजिटरी को अलग रखता हूं और REPO-B (बिना .गित) की प्रतिलिपि में REPO-B में किए गए परिवर्तनों की प्रतिलिपि बनाता हूं जो REPO-A में नेस्टेड है। मैं rsync के साथ ऐसा करता हूं। मैं rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/REPO-B
Shai

29

हां, आप वास्तव में वही कर सकते हैं जो आप फ़ाइल पदानुक्रम के साथ पूछ रहे हैं। रेपो-बी स्वतंत्र होगा और रेपो-ए का कोई ज्ञान नहीं होगा। रेपो-ए अपनी फ़ाइलों और रेपो-बी की फाइलों में सभी परिवर्तनों को ट्रैक करेगा।

हालांकि, मैं ऐसा करने की सलाह नहीं दूंगा। हर बार जब आप फाइलें बदलते हैं और रेपो-बी में होते हैं, तो आपको रेपो-ए में प्रतिबद्ध होना पड़ेगा। रेपो-बी में ब्रांचिंग, रेपो-ए के साथ गड़बड़ करेगा और रेपो-ए में ब्रांचिंग से विस्की (फोल्डर को हटाने में परेशानी आदि) होगी। सबमॉड्यूल निश्चित रूप से जाने का रास्ता है।


53
क्या आप केवल REPO-B को /REPO-A/.gitignore में नहीं जोड़ सकते?
मिकेलब्रम

2
@ मिक्केलब्रम I का सटीक विचार था। वर्तमान में हम अपने मुख्य प्रोजेक्ट के लिए सबवेरियन का उपयोग कर रहे हैं और सबफ़ोल्डर्स में से एक में git रेपो का उपयोग करते हैं। SVN के साथ मैंने sv के साथ git रेपो के साथ फ़ोल्डर जोड़ा: संपत्ति की उपेक्षा करें और मैं खुद से पूछ रहा था कि क्या मैं git के साथ भी ऐसा कर सकता हूं।
2ndkauboy

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

18
मैंने अभी इस सटीक परिदृश्य को लागू किया है। मेरे पास सबफ़ोल्डर में कुछ असम्पीडित सीएसएस फाइलें हैं जिन्हें मैं दूरस्थ रेपो में धकेलना नहीं चाहता, इसलिए यह मेरे .gitignore में है। लेकिन मैं स्थानीय स्तर पर इन फाइलों में बदलाव को ट्रैक करना चाहता हूं। मैंने असम्पीडित फ़ाइलों के साथ फ़ोल्डर के अंदर एक रेपो सेट किया और सभी फाइलों को उस रेपो में जोड़ा। यह अभी भी जनक रेपो द्वारा अनदेखा किया गया है लेकिन मैं उप-रेपो के अंदर परिवर्तनों को ट्रैक कर सकता हूं। अनुशंसित या नहीं, यह समाधान इस तरह की कुछ स्थितियों के लिए महत्वपूर्ण है।
ब्रायन वीपीएस

1
मुझे लगता है कि जब भी आप एक रिपॉजिटरी में शाखाओं को स्विच करते हैं तो दूसरे में परिवर्तनों का एक पूरा गुच्छा दिखाई देगा, लेकिन "रेपो-ए में शाखाओं में बँधना" (फ़ोल्डर्स को हटाने में परेशानी आदि) क्यों होगा? "। धन्यवाद!
user2688151

2

आप प्राप्त कर सकते हैं कि आप क्या चाहते हैं (कि REPO-A रेपो में सभी फाइलें शामिल हैं, जिनमें फ़ोल्डर REPO-B केवल एक संदर्भ के बजाय) "git-subrepo" का उपयोग करके शामिल हैं:

https://github.com/ingydotnet/git-subrepo

यह अभी भी काम करता है अगर आपके कुछ योगदानकर्ताओं के पास सब्रेपो कमांड स्थापित नहीं है; वे संपूर्ण फ़ोल्डर संरचना देखेंगे, लेकिन सबप्रॉप में परिवर्तन करने में सक्षम नहीं होंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.