Git
submodules
खोज…
एक सबमॉड्यूल जोड़ना
आप अपने प्रोजेक्ट के भीतर एक फ़ोल्डर के रूप में एक और Git रिपॉजिटरी शामिल कर सकते हैं, Git द्वारा ट्रैक किया गया:
$ git submodule add https://github.com/jquery/jquery.git
आपको नई .gitmodules
फ़ाइल को जोड़ना और प्रतिबद्ध करना चाहिए; यह बताता है कि गिट git submodule update
चलने पर क्या सबमॉडल्स को क्लोन किया जाना चाहिए।
सबमॉडल्स वाले एक गिट रिपॉजिटरी की क्लोनिंग
जब आप एक रिपॉजिटरी को क्लोन करते हैं जो सबमॉड्यूल्स का उपयोग करता है, तो आपको उन्हें प्रारंभ और अपडेट करने की आवश्यकता होगी।
$ git clone --recursive https://github.com/username/repo.git
यह संदर्भित सबमॉड्यूल्स को क्लोन करेगा और उन्हें उपयुक्त फ़ोल्डर्स (सबमॉड्यूल्स के भीतर सबमॉड्यूल्स सहित) में रखेगा। यह क्लोन git submodule update --init --recursive
चलाने के बराबर है - क्लोन समाप्त होने के तुरंत बाद।
एक सबमॉड्यूल को अपडेट करना
एक सबमॉड्यूल एक और रिपॉजिटरी में एक विशिष्ट प्रतिबद्धता का संदर्भ देता है। सभी submodules के लिए संदर्भित सटीक स्थिति की जाँच करने के लिए, चलाएँ
git submodule update --recursive
कभी-कभी आपके द्वारा संदर्भित राज्य का उपयोग करने के बजाय आप अपने स्थानीय चेकआउट को रिमोट पर उस सबमॉड्यूल की नवीनतम स्थिति में अपडेट करना चाहते हैं। एक ही आदेश के साथ रिमोट पर नवीनतम राज्य के सभी सबमॉड्यूल्स की जांच करने के लिए, आप उपयोग कर सकते हैं
git submodule foreach git pull <remote> <branch>
या डिफ़ॉल्ट git pull
तर्क का उपयोग करें
git submodule foreach git pull
ध्यान दें कि यह सिर्फ आपकी स्थानीय कार्य प्रतिलिपि को अपडेट करेगा। यदि इस कमांड के कारण परिवर्तन हो तो रनिंग git status
सबमॉडल डायरेक्टरी को गंदे के रूप में सूचीबद्ध करेगी। इसके बजाय नए राज्य को संदर्भित करने के लिए अपने भंडार को अपडेट करने के लिए, आपको बदलाव करने होंगे:
git add <submodule_directory>
git commit
आपके द्वारा किए जाने वाले कुछ बदलाव हो सकते हैं यदि आप git pull
उपयोग करते हैं तो आप मर्ज संघर्ष कर सकते हैं ताकि आप अपने परिवर्तनों को शीर्ष पर git pull --rebase
लिए git pull --rebase
का उपयोग कर सकें, अधिकांश समय यह संघर्ष की संभावना को कम करता है। इसके अलावा यह सभी शाखाओं को स्थानीय तक खींचता है।
git submodule foreach git pull --rebase
किसी विशिष्ट सबमॉडल की नवीनतम स्थिति की जांच करने के लिए, आप इसका उपयोग कर सकते हैं:
git submodule update --remote <submodule_directory>
एक शाखा का पालन करने के लिए एक सबमॉड्यूल सेट करना
एक सबमॉडल को हमेशा एक विशिष्ट प्रतिबद्ध SHA1 ("गिटलिंक", माता-पिता रेपो के सूचकांक में विशेष प्रविष्टि) पर चेक किया जाता है
लेकिन कोई उस सबमॉड्यूल को अद्यतन करने का अनुरोध कर सकता है जो कि सबमॉड्यूल रिमोट रेपो की एक शाखा के नवीनतम कमिट में है।
प्रत्येक git checkout abranch --track origin/abranch, git pull
में जाने के बजाए, git checkout abranch --track origin/abranch, git pull
, आप बस (जनक रेपो से) कर सकते हैं:
git submodule update --remote --recursive
चूंकि सबमॉडल का SHA1 बदल जाएगा, इसलिए आपको इसके साथ पालन करने की आवश्यकता होगी:
git add .
git commit -m "update submodules"
यह माना जाता है कि सबमॉड्यूल्स थे:
या तो पालन करने के लिए एक शाखा के साथ जोड़ा गया:
git submodule -b abranch -- /url/of/submodule/repo
या किसी शाखा का अनुसरण करने के लिए (किसी मौजूदा सबमॉड्यूल के लिए) कॉन्फ़िगर किया गया है:
cd /path/to/parent/repo git config -f .gitmodules submodule.asubmodule.branch abranch
एक सबमॉडल हटाना
आप कॉल करके एक the_submodule
(जैसे the_submodule
) निकाल सकते हैं:
$ git submodule deinit the_submodule
$ git rm the_submodule
git submodule deinit the_submodule
the_submodule
/ config सेthe_submodule
s 'प्रविष्टि को हटाता है। यह g_ सबमॉड्यूलgit submodule update
,git submodule sync
सबमॉड्यूलgit submodule sync
औरgit submodule foreach
सबमॉड्यूल फॉरचेट कॉल से g_ सबमॉड्यूल को बाहर कर देता है और इसकी स्थानीय सामग्री (स्रोत) को हटा देता है। इसके अलावा, यह आपके माता-पिता के भंडार में परिवर्तन के रूप में नहीं दिखाया जाएगा।git submodule init
औरgit submodule update
सबमॉड्यूलgit submodule update
आपके माता-पिता के भंडार में सराहनीय बदलाव के बिना, फिर से सबमॉड्यूल को बहाल करेगा।git rm the_submodule
को कार्य के पेड़ से हटा देगा। फाइलें.gitmodules
फ़ाइल (स्रोत) में.gitmodules
की प्रविष्टि के साथ-साथ.gitmodules
। यदि केवलgit rm the_submodule
(बिना पूर्वgit submodule deinit the_submodule
के चलाया जाता है, हालाँकि, आपके .it / config फ़ाइल मेंgit submodule deinit the_submodule
की प्रविष्टि बनी रहेगी।
यहाँ से लिया गया:
-
.gitmodules
फ़ाइल से संबंधित अनुभाग हटाएं। - स्टेज
.gitmodules
git add .gitmodules
-
.git/config
से संबंधित अनुभाग हटाएं। - रन
git rm --cached path_to_submodule
(कोई अनुगामी स्लेश) नहीं। -
rm -rf .git/modules/path_to_submodule
- कमिट
git commit -m "Removed submodule <name>"
- अब अनटैक किए गए सबमॉड्यूल फ़ाइलों को हटा दें
-
rm -rf path_to_submodule
एक सबमॉड्यूल को आगे बढ़ाना
Daud:
$ git mv old/path/to/module new/path/to/module
1.8 .gitmodules
संपादित करें और .gitmodules
के पथ को उचित रूप से बदलें, और इसे git add .gitmodules
साथ इंडेक्स में git add .gitmodules
।
यदि आवश्यक हो, तो सबमॉड्यूल ( mkdir -p new/path/to
) के नए स्थान की मूल निर्देशिका बनाएं।
सभी सामग्री को पुरानी से नई निर्देशिका में ले जाएं ( mv -vi old/path/to/module new/path/to/submodule
)।
सुनिश्चित करें कि Git इस निर्देशिका को ट्रैक करता है ( git add new/path /to
)।
पुराने निर्देशिका को git rm --cached old/path/to/module
निकालें।
निर्देशिका को .git/modules/ old/path/to/module
अपनी सभी सामग्री के साथ .git/modules/ new/path/to/module
।
.git/modules/ new/path/to /config
फ़ाइल संपादित करें, सुनिश्चित करें कि वर्कट्री आइटम नए स्थानों पर इंगित करता है, इसलिए इस उदाहरण में यह worktree = ../../../../../ old/path/to/module
होना चाहिए worktree = ../../../../../ old/path/to/module
। आमतौर पर दो और होना चाहिए ..
फिर उस जगह सीधे रास्ते में निर्देशिका। । फ़ाइल संपादित new/path/to/module /.git
, यकीन है कि यह में पथ मुख्य परियोजना के अंदर सही नए स्थान को इंगित कर .git
फ़ोल्डर, इस उदाहरण में तो gitdir: ../../../.git/modules/ new/path/to/module
।
git status
आउटपुट इस तरह दिखता है:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: .gitmodules
# renamed: old/path/to/submodule -> new/path/to/submodule
#
अंत में, बदलाव करें।
एक्सल बेकर्ट द्वारा स्टैक ओवरफ्लो का यह उदाहरण
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow