गिट सबमॉड्यूल और सबट्री का उपयोग करने के बीच वैचारिक मतभेद क्या हैं?
प्रत्येक के लिए विशिष्ट परिदृश्य क्या हैं?
गिट सबमॉड्यूल और सबट्री का उपयोग करने के बीच वैचारिक मतभेद क्या हैं?
प्रत्येक के लिए विशिष्ट परिदृश्य क्या हैं?
जवाबों:
क्या होगा यदि मैं चाहता हूं कि लिंक हमेशा बाहरी रेपो के HEAD को इंगित करें?
आप सबमॉडल रिमोट रेपो की एक शाखा के हेड का अनुसरण करने के लिए एक सबमॉड्यूल बना सकते हैं:
ओ git submodule add -b <branch> <repository> [<path>]
। (पालन करने के लिए एक शाखा निर्दिष्ट करने के लिए)
ओ git submodule update --remote
जो <repository>/<branch>
डिफ़ॉल्ट रूप से नवीनतम HEAD से सबमॉड्यूल की सामग्री को अपडेट करेगा origin/master
। आपकी मुख्य परियोजना अभी भी सबमॉडल के हेड के हैश को ट्रैक करेगी भले ही --remote
इसका उपयोग किया जाता हो।
add -b
और --remote
उसके बाद दोनों का उपयोग करके पूरा किया जाता है । उस मामले में, क्या वास्तव में मास्टर के HEAD के लिए अभी भी आवश्यक है? -b
-b
का उपयोग सबमॉडल के लिए सही (.Itmodule मेटाडेटा) उत्पन्न करने के लिए किया जाता है (यह a के बराबर है git config -f .gitmodules submodule.<path>.branch <branch>
)।
--remote
- --remote
काम करता है अगर यह भी -b
इस्तेमाल नहीं किया गया है add
। दोनों मामलों में अद्यतन माता-पिता रेपो हाउसिंग सबमॉडल में एक कमिट का कारण बनेगा, इसलिए लिंक वास्तव में "हमेशा HEAD को इंगित नहीं करता है" बहुत ही स्वचालित तरीके से .... या तो मुझे यह नहीं मिला, या वह दावा बेहतर मूल उत्तर (?) से हटाया जा सकता है
वैचारिक अंतर है:
गिट सबमॉड्यूल के साथ आप आम तौर पर एक बड़े भंडार को छोटे लोगों में अलग करना चाहते हैं। एक सबमॉडल को संदर्भित करने का तरीका मावेन-शैली है - आप दूसरे (सबमॉड्यूल) रिपॉजिटरी से एक एकल कमिट का संदर्भ दे रहे हैं। यदि आपको सबमॉड्यूल के भीतर एक बदलाव की आवश्यकता है, तो आपको सबमॉड्यूल के भीतर एक कमिट / पुश करना होगा, फिर मुख्य रिपॉजिटरी में नई कमिट का संदर्भ लें और फिर मुख्य रिपॉजिटरी के बदले हुए संदर्भ को कमिट / पुश करें। इस तरह आपको पूर्ण निर्माण के लिए दोनों रिपॉजिटरी तक पहुंच प्राप्त करनी होगी।
गिट सबट्री के साथ आप अपने इतिहास में एक और रिपॉजिटरी को एकीकृत करते हैं। इसलिए इसे एकीकृत करने के बाद, आपकी रिपॉजिटरी का आकार संभवतः बड़ा है (इसलिए यह रिपॉजिटरी को छोटा रखने की कोई रणनीति नहीं है)। एकीकरण के बाद अन्य रिपॉजिटरी से कोई संबंध नहीं है, और जब तक आप अपडेट प्राप्त नहीं करना चाहते हैं, तब तक आपको इसकी आवश्यकता नहीं है। इसलिए यह रणनीति कोड और इतिहास के पुन: उपयोग के लिए अधिक है - मैं व्यक्तिगत रूप से इसका उपयोग नहीं करता हूं।
git subtree
आप के साथ अभी भी धक्का दे सकते हैं - अगर आप चाहते थे - सही?
उप-मॉड्यूल
को रिमोट में मुख्य रेपो को धकेलने से उप-मॉड्यूल की फ़ाइलों को धक्का नहीं पड़ता है
उप-पेड़
एक मुख्य रेपो को दूरस्थ धकेलने के लिए उप-ट्री की फ़ाइलों को धकेलता है
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master