मैं एक git रेपो में निर्भरता कैसे जोड़ सकता हूं?


148

अपनी लिपियों में, मैं अक्सर पुस्तकालयों (मेरा या अन्य ') का उपयोग करता हूं, जिनके पास अपने स्वयं के भंडार होते हैं। मैं अपने रेपो में उन लोगों को डुप्लिकेट नहीं करना चाहता और हर बार एक नया संस्करण आने पर उन्हें अपडेट करने के साथ अटक जाता हूं। हालांकि, जब कोई रेपो क्लोन करता है, तो उसे अभी भी स्थानीय रूप से काम करना चाहिए और लिंक नहीं तोड़े जाने चाहिए।

मैं क्या कर सकता है इसके बारे में कोई विचार?

जवाबों:


211

आप इसे git में सबमॉड्यूल के साथ कर सकते हैं। अपने भंडार में, करें:

git submodule add path_to_repo path_where_you_want_it

इसलिए, यदि पुस्तकालय के भंडार में URL था git://github.com/example/some_lib.gitऔर आप इसे lib/some_libअपनी परियोजना में चाहते थे , तो आप दर्ज करेंगे:

git submodule add git://github.com/example/some_lib.git lib/some_lib

ध्यान दें कि यह आपकी रिपॉजिटरी में शीर्ष-स्तरीय निर्देशिका से किया जाना चाहिए। तो cdनिर्देशिका में नहीं है जहाँ आप इसे पहले डाल रहे हैं।

जब आप कोई सबमॉड्यूल जोड़ते हैं, या जब भी कोई आपकी रिपॉजिटरी का नया चेकआउट करता है, तो आपको यह करना होगा:

git submodule init
git submodule update

और फिर आपके द्वारा जोड़े गए सभी सबमॉड्यूल्स को उसी संशोधन में चेक किया जाएगा जो आपके पास है।

जब आप पुस्तकालयों में से किसी एक के नए संस्करण को अद्यतन करना चाहते हैं, cdतो सबमोडुले और पुल में:

cd lib/some_lib
git pull

फिर, जब आप करते हैं तो git statusआपको lib/somelibसंशोधित अनुभाग में सूचीबद्ध देखना चाहिए । वह फ़ाइल जोड़ें, प्रतिबद्ध करें, और आप अद्यतित हैं। जब कोई सहयोगी अपनी रिपॉजिटरी में कमिट करता है, तो वे lib/somelibतब तक संशोधित होते रहेंगे, जब तक कि वे git submodule updateफिर से न चलें ।


2
आपके उत्तर के लिए धन्यवाद, उत्कीर्ण! (और शायद कल इसे स्वीकार कर लेंगे) क्या निर्भरता के रूप में अन्य रेपो से केवल एक फ़ाइल जोड़ने का एक तरीका है? या क्या यह एक संपूर्ण फ़ोल्डर होना चाहिए?
ली वेरो

2
यदि आप इसे एक सबमॉड्यूल के रूप में ट्रैक करना चाहते हैं (और इस प्रकार, आसानी से अपडेट में सक्षम हो सकते हैं) तो आपको पूरे रिपॉजिटरी में खींचना होगा। अन्य वीसीएस के बहुत से विपरीत, गिट वास्तव में केवल शीर्ष स्तर के भंडार से निपटना चाहते हैं।
एमिली

7
यह जानने के लिए इसे पढ़ें कि एक सबमॉड्यूल क्या है और संभावित मुद्दों को हल करने के तरीके। और इसके बारे में एक चर्चा
मिंगुआ

1
आप कहते हैं कि आप एक सबमॉडल के रूप में आयात करते हैं जो आपके पास एक और रेपो है। क्या आप सबमॉडल में अपने स्थानीय परिवर्तनों के माध्यम से मूल रेपो में बदलाव कर सकते हैं? कहते हैं कि आपको एक बग मिला है और मूल को अपडेट करने की आवश्यकता है?
andrevenancio

3
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन git submodule update --remoteमैं अधिक जटिल परियोजनाओं के लिए अधिक झंडे का उपयोग करने की सलाह देते हुए गिट सबमॉडल्स को अपडेट कर सकता हूं। मैं उपयोग करता हूंgit submodule update --remote --recursive --init
क्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.