गिट सबमॉडल पुश


128

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


4
जीआईटी 2.7 (जनवरी 2016) के साथ, आपको केवल एक बार सेट करना होगा git config push.recurseSubmodules on-demand। फिर एक साधारण सब कुछ (मुख्य रेपो और सबमॉड्यूल्स) git pushको पुश करने के लिए पर्याप्त होगा । देखें नीचे मेरी संपादित जवाब
VonC

आप जो करने का प्रयास कर रहे हैं, उसके लिए कृपया नमूना कोड प्रदान करें।
सिरो सेंटिल्ली 郝海东 冠状 i i ''

जवाबों:


138

एक सबमॉड्यूल कुछ और नहीं बल्कि कुछ अतिरिक्त मेटा डेटा (gitlink ट्री एंट्री, .itmodules फ़ाइल) के साथ एक अन्य रेपो के भीतर git रेपो का एक क्लोन है।

$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"

1
हां, और धक्का देने से पहले अपनी सिंक्रनाइज़ स्थानीय शाखा (यदि कोई हो) से परिवर्तन खींचना न भूलें। होता है। जब gh-pagesएक github रेपो पर प्रलेखन के लिए एक शाखा के साथ काम कर रहे :) :)
NiKo

मुझे समझ नहीं आ रहा है कि आप अपना_सुबमॉड्यूल जोड़ने से पहले अपने_सुबमॉडल को कैसे बता सकते हैं? मैं सबमॉडल जोड़ने का सबसे अच्छा तरीका है "जोड़" कमांड का उपयोग करके। तो क्या सबमॉड्यूल को जोड़ने का एक और तरीका है?
MrSo

1
@ मेरो मुझे लगता है कि सबमॉड्यूल पहले से ही है, वह सबमॉडल में कुछ बदलाव करने के लिए इस पर विचार कर रहा है।
HattrickNZ

108

ध्यान दें कि चूंकि git1.7.11 ( [ANNOUNCE] Git 1.7.11.rc1 और रिलीज़ नोट , जून 2012) का उल्लेख है:

" git push --recurse-submodules" सुपरप्रोजेक्ट से बंधे सबमोड्यूल्स के इतिहास को वैकल्पिक रूप से देखना और उन्हें बाहर धकेलना सीखा।

संभवतः इस पैच और --on-demandविकल्प के बाद:

recurse-submodules=<check|on-demand>::

सुनिश्चित करें कि जिन सबमॉड्यूल्स का उपयोग संशोधनों के द्वारा किया गया है, वे दूरस्थ ट्रैकिंग शाखा पर उपलब्ध हों।

  • यदि checkइसका उपयोग किया जाता है, तो यह जांचा जाएगा कि सभी सबमॉड्यूल कमिट करते हैं जिन्हें धकेल दिए जाने वाले संशोधनों में बदल दिया गया है जो रिमोट पर उपलब्ध हैं।
    अन्यथा धक्का निरस्त कर दिया जाएगा और गैर-शून्य स्थिति के साथ बाहर निकल जाएगा।
  • यदि on-demandउपयोग किया जाता है, तो सभी सबमॉड्यूल्स जो धकेलने के लिए संशोधन में बदल जाते हैं, धकेल दिए जाएंगे।
    यदि ऑन-डिमांड सभी आवश्यक संशोधनों को आगे बढ़ाने में सक्षम नहीं थी, तो इसे गैर-शून्य स्थिति के साथ निरस्त और बाहर कर दिया जाएगा।

तो आप सब कुछ एक साथ (मूल रेपो से) धक्का दे सकते हैं:

git push --recurse-submodules=on-demand

यह विकल्प केवल एक स्तर के घोंसले के शिकार के लिए काम करता है। किसी अन्य सबमॉड्यूल के अंदर सबमॉड्यूल में परिवर्तन को धक्का नहीं दिया जाएगा।


जीआईटी 2.7 (जनवरी 2016) के साथ, पैरेंट रेपो ... और इसके सभी सबमॉड्यूल्स को धकेलने के लिए एक साधारण गिट पुश पर्याप्त होगा ।

कमिट d34141c देखें , f5c7cd9 (03 दिसंबर 2015), प्रतिबद्ध f5c7cd9 (03 दिसंबर 2015), और माइक क्रो ( ) द्वारा b33a15b (17 नवंबर 2015 ) देखें( जूनियो सी हमानो द्वारा विलय - - में 5d35d72 , 21 दिसंबर 2015)mikecrowe
gitster

push: recurseSubmodulesconfig विकल्प जोड़ें

--recurse-submodulesकमांड लाइन पैरामीटर कुछ समय के लिए ही अस्तित्व में है, लेकिन यह कोई कॉन्फ़िग फ़ाइल बराबर है।

के लिए इसी पैरामीटर की शैली के बाद git fetch, आइए push.recurseSubmodulesइस पैरामीटर के लिए एक डिफ़ॉल्ट प्रदान करने के लिए आविष्कार करें।
आवश्यकता --recurse-submodules=noहोने पर कमांड लाइन पर कॉन्फ़िगरेशन को अनुमति देने के लिए इसके अतिरिक्त की आवश्यकता होती है।

इसे लागू करने का सबसे सीधा तरीका एक समान तरीके से pushउपयोग कोड बनाना प्रतीत होता submodule-configहै fetch

git configदस्तावेज़ अब शामिल :

push.recurseSubmodules:

सुनिश्चित करें कि जिन सबमॉड्यूल्स का उपयोग संशोधनों के द्वारा किया गया है, वे रिमोट-ट्रैकिंग शाखा पर उपलब्ध हैं।

  • यदि मान ' check' है, तो Git यह सत्यापित करेगा कि सभी सबमॉड्यूल कमिट करता है कि जिन संशोधनों को धकेल दिया जाना है, वे सबमॉडल के कम से कम एक रिमोट पर उपलब्ध हैं। यदि कोई कमिट गायब है, तो पुश को निरस्त कर दिया जाएगा और गैर-शून्य स्थिति के साथ बाहर निकल जाएगा।
  • यदि मान ' on-demand' है, तो धकेल दिए जाने वाले संशोधनों में परिवर्तित होने वाले सभी सबमॉड्यूल को धकेल दिया जाएगा। यदि ऑन-डिमांड सभी आवश्यक संशोधनों को आगे बढ़ाने में सक्षम नहीं थी, तो इसे गैर-शून्य स्थिति के साथ निरस्त और बाहर कर दिया जाएगा। -
  • यदि मान ' no' है तो धकेलने को बनाए रखने पर सबमोड्यूल्स की अनदेखी करने का डिफ़ॉल्ट व्यवहार।

आप ' --recurse-submodules=check|on-demand|no' को निर्दिष्ट करके पुश के समय इस कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं ।

इसलिए:

git config push.recurseSubmodules on-demand
git push

Git 2.12 (Q1 2017)

git push --dry-run --recurse-submodules=on-demand वास्तव में काम करेगा।

देखें प्रतिबद्ध 0301c82 , प्रतिबद्ध 1aa7365 (17 नवंबर 2016) द्वारा ब्रैंडन विलियम्स ( mbrandonw)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 12cf113 , 16 दिसंबर 2016)

push run with --dry-runवास्तव में नहीं है (Git 2.11 Dec 2016 और निम्न / पहले) एक सूखी-रन करें जब सबमोडुल्स इन-डिमांड पुश करने के लिए पुश कॉन्फ़िगर किया गया हो।
इसके बजाय सभी सबमोडुल्स जिन्हें धकेलने की आवश्यकता होती है, वास्तव में उनके रिमोट में धकेल दिए जाते हैं जबकि सुपरप्रोजेक्ट के लिए कोई भी अपडेट ड्राई-रन के रूप में किया जाता है।
यह एक बग है और न कि सूखा चलाने का इरादा व्यवहार।

जब सबमोडुल्स को 'ऑन-डिमांड' पुन: पुश करने के लिए कॉन्फ़िगर करने पर विकल्प pushका सम्मान करना सिखाएं --dry-run
यह --dry-runबाल प्रक्रिया को ध्वज को पारित करके किया जाता है जो एक सूखी-रन का प्रदर्शन करते समय एक सबमॉड्यूल के लिए एक धक्का देता है।


और अभी भी Git 2.12 में, आप अब शीर्ष स्तरीय सुपरप्रोजेक्ट को धकेलने के बिना सबमॉड्यूल्स को धकेलने के लिए--recurse-submodules=only " havea " विकल्प चुनते हैं ।

देखें 225e8bf प्रतिबद्ध , 6c656c3 प्रतिबद्ध , प्रतिबद्ध 14c01bd द्वारा (19 दिसंबर 2016) ब्रेंडन विलियम्स ( mbrandonw)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 792e22e , 31 जनवरी 2017)


यह उपलब्ध है अब है ना?
CMCDragonkai

@CMCDragonkai हाँ यह है, आप इसे git-scm.com/docs/git-push में देख सकते हैं । मैंने उत्तर संपादित किया है।
VONC

क्या एक पुनरावर्ती प्रतिबद्ध है?
CMCDragonkai

1
आप हमेशा 'Git submodule foreach के लिए प्रतिबद्ध' कर सकते हैं
reflog

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