2012-05-04 10 views
30

मुझे गिट submodules प्यार करता हूँ। इसके अलावा, मुझे गिट submodules से नफरत है। मुझे उनके बारे में क्या पसंद है यह है कि यह आपको निर्भरता को स्पष्ट रूप से विभाजित करने में सक्षम बनाता है। मुझे एक रेपो पर एक विशिष्ट प्रतिबद्धता को इंगित करने का मुद्दा मिलता है, मैं करता हूं। लेकिन मेरे मामले में, मैं एक पुस्तकालय का निर्माण कर रहा हूं जिसका उपयोग किसी अन्य प्रोजेक्ट में किया जाएगा, इसलिए मैं इसे उस अलग रेपो में रखना चाहता हूं।फोर्स गिट submodules हमेशा मौजूदा रहने के लिए

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

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

+0

इस मदद करता है? http://stackoverflow.com/questions/1777854/git-submodules-specify-a-branch-tag –

उत्तर

18

नहीं, और यह डिज़ाइन द्वारा है। अगर किसी अन्य भंडार के "वर्तमान सिर" में एक सबमिशन को इंगित करने का कोई तरीका था, तो मुख्य भंडार से ऐतिहासिक संस्करण (जैसे टैग किए गए संस्करण) को पुनर्प्राप्त करना असंभव होगा। यह नहीं पता होगा कि सबमिशन के किस संस्करण को जांचने के लिए।

ऐसा कहकर, आपको git subtree स्क्रिप्ट में रुचि हो सकती है। यह submodules के साथ काम करने का एक अलग तरीका प्रदान करता है जो आपके वर्कफ़्लो के साथ अधिक संगत हो सकता है। मुझे हाल ही में post on HN द्वारा इसकी याद दिलाई गई थी।

+2

हाँ, मुझे लगता है कि, मैं जो कह रहा हूं वह यह है कि मैं चाहता हूं कि मेरे माता-पिता रेपो स्वचालित रूप से सबमिशन पॉइंटर को स्वचालित रूप से अपडेट करें सबमिशन में स्थानीय रूप से किए गए परिवर्तन हैं। अगर मेरे पास प्रोजेक्ट ए है जिसमें प्रोजेक्ट ए पर काम करते समय सबमिशन एक्स है, तो मुझे लगातार 2 काम करना पड़ता है, एक सबमिशन में, फिर फिर माता-पिता में। यदि आप एक सबमिशन पर काम नहीं कर रहे हैं तो बहुत बड़ा सौदा नहीं है जो ज्यादा नहीं बदलता है, लेकिन जब आप लगातार आगे बढ़ते रहते हैं, तो यह वास्तव में परेशान हो जाता है ....ऐसा लगता है कि मुझे बस अपने स्थानीय रेपो को – Ben

+1

अनुवाद दोनों ही करने में सक्षम होना चाहिए: जब मैं सबमिशन में परिवर्तन करता हूं तो मेरे स्थानीय रिपो को मेरे लिए सबमिशन पॉइंटर अपडेट स्वचालित रूप से प्रतिबद्ध करने के लिए बताएं ... – Ben

+2

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

0

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

चेतावनियां:

  1. आप अब भी अपने ऐप रेपो अंदर submodule परिवर्तन प्रतिबद्ध करने के लिए (एप्लिकेशन के लिए) संस्करण नियंत्रण में परिवर्तन डाल करने के लिए की जरूरत है।

  2. यदि इस लाइब्रेरी का उपयोग करने वाले एक से अधिक ऐप्स हैं, तो यह काम नहीं करेगा, क्योंकि किसी भी समय केवल एक ऐप अद्यतित होगा।

    git submodule add -b <branch> <repository> [<path>] 
    

    एक submodule SHA1 अभी भी में दर्ज की गई है:

24

मैं "git submodule tracking latest" में उल्लेख किया है, आप कर सकते हैं Git 1.8.2 (मार्च 2013) के बाद से एक submodule शाखा के प्रमुख को ट्रैक करना के रूप में एक gitlink (special entry in the index) माता-पिता रेपो

लेकिन एक git submodule update --remote submodule दूरस्थ रेपो की एक शाखा के प्रमुख मिलान SHA1 के लिए उसी प्रविष्टि अद्यतन करेगा।

यदि आप किसी मौजूदा submodule, साथ you can make it follow a branch है:

cd /path/to/your/parent/repo 
git config -f .gitmodules submodule.<path>.branch <branch> 

cd path/to/your/submodule 
git checkout -b branch --track origin/branch 
    # if the master branch already exist: 
    git branch -u origin/master master 

cd /path/to/your/parent/repo 
git add path/to/your/submodule 
git commit -m "Make submodule tracking a branch" 
+0

हर बार जब मैं 'गिट सबमिशन अपडेट --remote' को सबमिशन को वापस प्रतिबद्ध करता हूं और HEAD संदर्भ –

+0

खो देता हूं 'गिट सबमिशन फ़ोरैच गिट पुल' करना ऐसा नहीं होता है। –

+0

@ मार्सेलोफिलो जो एक सबमिशन पर विचार करने में आश्चर्य की बात नहीं है, वह शाखा की जांच नहीं करता है। यदि यह किसी दूरस्थ शाखा का पालन करने के लिए कॉन्फ़िगर किया गया है, तो 'गिट सबमिशन अपडेट --remote --recursive' एकमात्र कमांड आवश्यक है। यह देखने के लिए कि क्या/उन सबमिशन शाखाओं का पालन करते हैं, अपने .gitmodules देखें। – VonC

संबंधित मुद्दे