बाहरी रेपो सबमॉड्यूल का उपयोग करने के लिए गिट प्रोजेक्ट कैसे स्थापित करें?


213

मैं एक रेपो बनाना चाहता हूं जो रिमोट रेपो में खींचता है।

उदाहरण के लिए, मान लें कि jQuery एक सबमॉड्यूल के रूप में है:

git://github.com/jquery/jquery.git

सबमॉडल के रूप में jQuery के साथ रेपो बनाने और रिमोट रेपो के रूप में मेरे अपने बाहरी को जोड़ने की प्रक्रिया क्या होगी।

इसके अलावा एक बार यह सेटअप हो जाता है, अगर मैं अपने रिमोट से पुश / पुल करता हूं, तो क्या बाहरी बरकरार रहेगा?


1
जब आप कहते हैं "पुल इन" तो आप कह रहे हैं कि आप चाहते हैं कि jQuery रेपो आपके खुद के रेपो का सबमॉड्यूल हो?
इज़ोद

हाँ ठीक है, अगर यह स्पष्ट नहीं है तो क्षमा करें। मैं जानना चाहता हूं कि कैसे मैंने इसे अपने रिमोट में परिवर्तन करने और खींचने के दौरान बाहरी के रूप में सेट किया
टॉम

जवाबों:


343
  1. आपके पास एक परियोजना है - इसे MyWebApp कहें, जिसमें पहले से ही एक गिथब रेपो है
  2. आप अपने प्रोजेक्ट में jquery रिपॉजिटरी का उपयोग करना चाहते हैं
  3. आप अपने प्रोजेक्ट में jquery रेपो को एक सबमॉड्यूल के रूप में खींचना चाहते हैं ।

सबमॉड्यूल्स वास्तव में, संदर्भ और उपयोग के लिए वास्तव में आसान हैं। मान लें कि आपके पास पहले से ही MyWebApp एक रेपो के रूप में सेट है, टर्मिनल इश्यू से ये कमांड्स:

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

यह externals/jquery* नाम की एक निर्देशिका बनाएगा और इसे गीथूब जेकरी रिपॉजिटरी से लिंक करेगा। अब हमें बस सबमॉड्यूल को इनिट करने और कोड को क्लोन करने की आवश्यकता है:

git submodule update --init --recursive

अब आपके पास सबमॉडल में क्लोन किए गए सभी नवीनतम कोड होने चाहिए। यदि jquery रेपो बदल जाता है और आप नवीनतम कोड को नीचे खींचना चाहते हैं, तो बस submodule updateफिर से कमांड जारी करें। कृपया ध्यान दें: मेरे पास आमतौर पर मेरी परियोजनाओं में कई बाहरी रिपॉजिटरी हैं, इसलिए मैं हमेशा "एक्सटर्नल" निर्देशिका के तहत रिपोज को समूह में रखता हूं।

ऑनलाइन प्रो गिट बुक में सबमॉडल्स (और सामान्य रूप से गिट) पर कुछ अच्छी जानकारी है जो एक आसान-से-पढ़े गए फैशन में प्रस्तुत की गई है। वैकल्पिक रूप से, git help submoduleअच्छी जानकारी भी देंगे। या गिट विकी पर Git Submodule ट्यूटोरियल देखें

मैंने इस ब्लॉग प्रविष्टि पर ध्यान दिया, जो सबमॉड्यूल्स के बारे में बात करती है और उनकी तुलना सबवर्सन के svn: externals मैकेनिज्म: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html से करती है।

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


4
महान व्याख्या! :) इसके अलावा, "git help submodules" मदद करता है यदि आप थोड़ा अधिक विवरण, इंटर्नल आदि चाहते हैं
WhyNotHugo

2
धन्यवाद, वास्तव में मुझे क्या चाहिए।
माइकस्किंकेल

1
@ चेवी यह आपकी आवश्यकताओं पर निर्भर करता है। सामान्य तौर पर, अपनी परियोजना में एक सबमॉड्यूल के रूप में एक गिट परियोजना को जोड़ना उन परियोजनाओं के लिए एक अच्छा समाधान है जो अक्सर बदलते हैं या अभी भी विकास में हैं। इससे आप आसानी से यह सुनिश्चित कर सकते हैं कि आपकी परियोजना के सभी 3 पार्टी कोड अप टू डेट हैं। 3 पार्टी कोड के लिए जो अनिवार्य रूप से स्थिर - स्थिर, परिपक्व कोड है जो शायद संस्करण-से-संस्करण तक बहुत कुछ नहीं बदलेगा - एक सबमॉड्यूल का उपयोग करना बहुत अधिक मूल्य प्रदान नहीं करता है।
मेमोन्स

2
क्षमा करें, लेकिन svn बाहरी लोगों की तुलना में, यह इतना आसान नहीं है
Keil

2
@Keil यह दो कमांड है, git submodule addऔर git submodule update... मुझे यकीन नहीं है कि यह कितना आसान हो सकता है।
3

24

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

जैसा कि आप जानते हैं, "गिट पुल" सबमॉड्यूल को अपडेट नहीं करेगा, और "गिट सबमॉडल्स अपडेट" उन सबमॉडल्स के नवीनतम HEAD को डाउनलोड नहीं करेगा।

अपने सभी सबमॉडल्स को उनके नवीनतम अपस्ट्रीम रिविजन में अपडेट करने के लिए, आप उपयोग कर सकते हैं

git submodule foreach git pull

यदि आप अक्सर अपने सबमॉड्यूल्स को बदल देते हैं, और बहुत सारे हैं, तो "गिट फ़ॉरच" अमूल्य हो जाएगा।


2

अंत में मैंने पाया कि http://github.com/evilchelu/braid मुझे लगता है कि मैं कैसे सबमॉड्यूल्स और काम करने के लिए उपाय की उम्मीद के साथ फिट हूं


0

मुझे लगता है कि @ ह्यूगो जवाब हो सकता है कि आपको क्या चाहिए और ठीक काम करता है। इसलिए मुझे एक आसान रास्ता मिल गया है।

git submodule update --remote

बस इतना ही।

तो एक पूर्ण वर्कफ़्लो हो सकता है:

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