गिट उपट्री का उपयोग कब करें?


81

क्या समस्या git subtreeहल होती है? मुझे उस सुविधा का उपयोग कब और क्यों करना चाहिए?

मैंने पढ़ा है कि इसका उपयोग रिपॉजिटरी सेपरेशन के लिए किया जाता है । लेकिन मैं सिर्फ दो असंबंधित लोगों को एक में बांटने के बजाय दो स्वतंत्र भंडार क्यों नहीं बनाऊंगा?

यह GitHub ट्यूटोरियल बताता है कि Git सबट्री मर्ज कैसे करें

मुझे पता है कि इसका उपयोग कैसे करना है, लेकिन कब (मामलों का उपयोग करें) और क्यों , और यह कैसे संबंधित है git submodule। जब मैं किसी अन्य प्रोजेक्ट या लाइब्रेरी पर निर्भरता रखता हूं तो मैं सबमॉड्यूल्स का उपयोग करूंगा।


1
"रिपॉजिटरी सेपरेशन"! = "असंबंधित रिपॉजिटरी" आपके रेपो में निर्भरता के बारे में सोचते हैं और आप सबमॉड्यूल का उपयोग नहीं करना चाहते हैं (किसी कारण से, शायद आपको यह पसंद नहीं है कि वे पारदर्शी नहीं हैं और कमिट में रास्ते हैं सबमॉड्यूल मुख्य गिट रेपो में आपके रास्ते से मेल नहीं खाता)।
सिपाही

1
@cyphar: आप कह रहे हैं कि दोनों submoduleऔर subtreeअधिक या कम एक ही लक्ष्य है, जिसमें संबंधित परियोजनाओं को शामिल किया गया है प्राप्त कर रहे हैं और कहा कि फर्क सिर्फ इतना है कि है submoduleऔर थोड़ा कम पारदर्शी हो सकता है अद्यतन करने submodules एक दो चरणों ऑपरेशन है और का दोष यह है कि subtreeवह यह है कि प्रतिबद्ध संदेश सभी दो परियोजनाओं के बीच मिलाया जाएगा?
लर्नकुरेव

1
खैर, यह वास्तव में कुछ मामलों में एक खामी नहीं है। उदाहरण के लिए, यदि आपको एक रिपॉजिटरी को बाइसेक्ट करना है जो कि subtreeएस है और एक बग को एक निर्भरता में पेश किया गया था , तो आपको उस बग को प्रस्तुत करने मेंsubtree सटीक प्रतिबद्धता मिलेगी । सबमॉड्यूल्स के साथ, आपको केवल यह पता चलेगा कि कमिट submoduleबग को रिवाइज करता है और आप एसओएल की तरह हैं यदि आप जल्दी से ढूंढना चाहते हैं जो submoduleआपके मुख्य प्रोजेक्ट में बग का कारण बनता है।
सिपाही

1
यहाँ एक लेख है जो व्यावहारिक उदाहरणों के साथ git सबट्री और git सबमॉडल की
8ctopus

जवाबों:


58

आप स्पष्ट रूप से ध्यान देने योग्य है कि तुम क्या जब तुम शब्द का उपयोग के बारे में बात कर रहे हैं सावधान रहना चाहिए 'सबट्री' के संदर्भ में gitवहाँ के रूप में वास्तव में दो अलग-अलग लेकिन संबंधित विषयों यहाँ हैं:

git-subtree और git सबट्री मर्ज रणनीति

टीएल, डॉ

दोनों उप-संबंधित अवधारणाएं प्रभावी रूप से आपको एक में कई रिपॉजिटरी का प्रबंधन करने की अनुमति देती हैं। Git-submodule के विपरीत जहां केवल मेटाडेटा को। Repmodules के रूप में रूट रिपॉजिटरी में संग्रहीत किया जाता है , और आपको बाहरी रिपॉजिटरी को अलग से प्रबंधित करना होगा।

अधिक जानकारी

git सबट्री मर्ज की रणनीति मूल रूप से आपके द्वारा संदर्भित आदेशों का उपयोग करके अधिक मैन्युअल विधि है।

git-subtree एक अधिक प्राकृतिक वाक्य रचना की सुविधा के लिए एक आवरण खोल स्क्रिप्ट है। यह वास्तव में अभी भी एक हिस्सा है contribऔर सामान्य आदमी पृष्ठों के साथ पूरी तरह से एकीकृत नहीं है। इसके बजाय दस्तावेज़ को स्क्रिप्ट के साथ संग्रहीत किया जाता है।

यहाँ उपयोग जानकारी है:

NAME
----
git-subtree - Merge subtrees together and split repository into subtrees


SYNOPSIS
--------
[verse]
'git subtree' add   -P <prefix> <commit>
'git subtree' add   -P <prefix> <repository> <ref>
'git subtree' pull  -P <prefix> <repository> <ref>
'git subtree' push  -P <prefix> <repository> <ref>
'git subtree' merge -P <prefix> <commit>
'git subtree' split -P <prefix> [OPTIONS] [<commit>]

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

आप जो चाह रहे हैं, उसमें से अधिकांश आप इस प्रासंगिक ब्लॉग पर निकोला पाओलूकी द्वारा प्रासंगिक खंड के नीचे पा सकते हैं:

सबमॉड्यूल के बजाय सबट्री का उपयोग क्यों करें?

आपको subtreeउपयोग करने के लिए बेहतर कारण मिल सकते हैं, इसके कई कारण हैं:

  • एक साधारण वर्कफ़्लो का प्रबंधन आसान है।
  • पुराने संस्करण gitसमर्थित हैं (पहले भी v1.5.2)।
  • cloneसुपर प्रोजेक्ट के ठीक बाद सब-प्रोजेक्ट का कोड उपलब्ध है।
  • subtreeआपके भंडार के उपयोगकर्ताओं को कुछ भी नया सीखने की आवश्यकता नहीं है, वे इस तथ्य को अनदेखा कर सकते हैं कि आप subtreeनिर्भरता को प्रबंधित करने के लिए उपयोग कर रहे हैं ।
  • subtreeनई मेटाडेटा फ़ाइलों को नहीं जोड़ता है जैसे submodules(करता है .gitmodule)।
  • मॉड्यूल की सामग्री को कहीं और निर्भरता की एक अलग रिपॉजिटरी कॉपी के बिना संशोधित किया जा सकता है।

मेरी राय में कमियां स्वीकार्य हैं:

  • आपको एक नई मर्ज रणनीति (यानी subtree) के बारे में सीखना चाहिए ।
  • upstreamउप-परियोजनाओं के लिए योगदान कोड वापस थोड़ा अधिक जटिल है।
  • सुपर और सब-प्रोजेक्ट कोड को कमिट में न मिलाने की जिम्मेदारी आपके साथ है।

मैं इस बात से बहुत सहमत हूँ। मैं कुछ सामान्य उपयोग से अधिक होने पर लेख को देखने की सलाह दूंगा।

आपने देखा होगा कि उन्होंने यहां एक अनुवर्ती भी लिखा है, जहां उन्होंने एक महत्वपूर्ण विवरण का उल्लेख किया है जो इस दृष्टिकोण के साथ छोड़ दिया गया है ...

git-subtree वर्तमान में रिमोट को शामिल करने में विफल रहता है!

यह छोटी दृष्टि शायद इस तथ्य के कारण है कि लोग अक्सर सबट्रीज़ के साथ काम करते समय मैन्युअल रूप से रिमोट जोड़ते हैं, लेकिन यह या तो गिट में जमा नहीं होता है। लेखक ने अपने द्वारा किए गए इस मेटा डेटा को जोड़ने के लिए लिखे गए एक पैच का विवरण दिया है जो git-subtreeपहले से ही उत्पन्न करता है। जब तक यह आधिकारिक git मेनलाइन में नहीं आता है तब तक आप प्रतिबद्ध संदेश को संशोधित करके या इसे किसी अन्य कमेंट में संग्रहीत करके कुछ ऐसा ही कर सकते हैं।

मुझे यह ब्लॉग पोस्ट बहुत जानकारीपूर्ण भी लगती है। लेखक तीसरे सबट्री विधि को जोड़ता है जिसे वह git-streeमिश्रण को कहता है। लेख पढ़ने के लायक है क्योंकि वह तीन दृष्टिकोणों की तुलना करने के लिए बहुत अच्छा काम करता है। वह क्या करता है और क्या पसंद नहीं करता है और बताते हैं कि उन्होंने तीसरा दृष्टिकोण क्यों बनाया, इसके बारे में वह अपनी व्यक्तिगत राय देते हैं।

अतिरिक्त

विचार बंद करना

यह विषय उस शक्ति gitऔर विभाजन दोनों को दिखाता है जो तब हो सकता है जब कोई विशेषता केवल निशान से चूक जाती है।

मैंने व्यक्तिगत git-submoduleरूप से एक अरुचि पैदा की है क्योंकि मुझे यह समझने में योगदानकर्ताओं के लिए अधिक भ्रमित लगता है। मैं अपने सभी आश्रितों को अपनी परियोजनाओं के भीतर प्रबंधित करने के लिए कई रिपॉजिटरी का प्रबंधन करने की कोशिश किए बिना आसानी से प्रतिलिपि प्रस्तुत करने योग्य वातावरण की सुविधा के लिए रखना पसंद करता हूं। git-submoduleहालाँकि, यह वर्तमान में बहुत अधिक अच्छी तरह से जाना जाता है इसलिए स्पष्ट रूप से इसके बारे में पता होना अच्छा है और आपके दर्शकों पर निर्भर करता है जो आपके निर्णय को प्रभावित कर सकते हैं।


12

सबसे पहले: मेरा मानना ​​है कि आपका प्रश्न पुरजोर तरीके से जवाब देने के लिए जाता है और यहाँ विषय से बाहर माना जा सकता है। हालाँकि मुझे वह एसओ नीति पसंद नहीं है और वह इस विषय की सीमा को थोड़ा बाहर की ओर धकेलेगा, इसलिए मुझे इसके बजाय जवाब देना पसंद है और उम्मीद है कि दूसरे भी ऐसा करेंगे।

GitHub ट्यूटोरियल पर जो आपने बताया कि उप-मर्ज की रणनीति का उपयोग करने के लिए एक लिंक है जो फायदे / नुकसान पर एक दृष्टिकोण देता है:

सबमॉड्यूल के साथ उप-मर्ज की तुलना करना

सबट्री मर्ज का उपयोग करने का लाभ यह है कि इसे आपके रिपॉजिटरी के उपयोगकर्ताओं से कम प्रशासनिक बोझ की आवश्यकता होती है। यह पुराने (Git v1.5.2 से पहले) ग्राहकों के साथ काम करता है और आपके पास क्लोन के बाद कोड सही है।

हालाँकि यदि आप सबमॉड्यूल का उपयोग करते हैं तो आप सबमॉड्यूल ऑब्जेक्ट को स्थानांतरित नहीं करने का विकल्प चुन सकते हैं । यह सबट्री मर्ज की समस्या हो सकती है।

इसके अलावा, यदि आप दूसरी परियोजना में बदलाव करते हैं, तो यदि आप सिर्फ सबमॉड्यूल का उपयोग करते हैं तो परिवर्तन प्रस्तुत करना आसान है

यहाँ ऊपर के आधार पर मेरा दृष्टिकोण है:

मैं अक्सर उन लोगों (= कमिटर्स) के साथ काम करता हूं, जो नियमित रूप से नहीं हैं, जो अभी भी (और हमेशा के लिए) संस्करण नियंत्रण के साथ संघर्ष करेंगे। सबमॉडल मर्ज रणनीति का उपयोग करने के बारे में उन्हें शिक्षित करना मूल रूप से असंभव है। इसमें विलय, शाखाओं के बारे में अतिरिक्त रीमोट की अवधारणाएं शामिल हैं, और फिर इसे सभी को एक वर्कफ़्लो में मिलाया जाता है। अपस्ट्रीम से खींचना और अपस्ट्रीम को पुश करना एक दो चरण की प्रक्रिया है। चूंकि शाखाओं को उनके लिए समझना मुश्किल है, यह सब निराशाजनक है।

सबमॉड्यूल्स के साथ यह उनके लिए अभी भी बहुत जटिल है ( आह ) लेकिन यह समझना आसान है: यह सिर्फ रेपो के भीतर एक रेपो है (वे पदानुक्रम से परिचित हैं) और आप हमेशा की तरह अपने पुश और पुलिंग कर सकते हैं।

सरल आवरण स्क्रिप्ट प्रदान करना सबमॉडल वर्कफ़्लो के लिए आसान इम्हो है।

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

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

व्यक्तिगत रूप से मैं खुद को उपयोग करने के लिए अनिर्दिष्ट हूं। इसलिए मैं आपका भ्रम साझा करता हूं: ओ]


3
यह उत्तर सबसे दृढ़ता से व्यक्त किया जा रहा है, जो मैंने विरोधाभास के बावजूद देखा है, क्योंकि यह एकमात्र उत्तर है, और स्वयं की भविष्यवाणी को पूरा करता है। दूसरों की सीखने की क्षमता पर उदासीन उच्छ्वास, कयामत का रवैया, यह एक बहुत ही अभिमानी जवाब है। नीति पर आपकी राय शायद मेटा पर है जहां यह मददगार हो सकती है। स्व-सेवारत फुलाना के बाहर ही जवाब, हालांकि बहुत अच्छा है।
vgoff

1
@vgoff: आपकी आलोचना सही है। अभिमानी प्रतीत होने के लिए खेद है - यह सिर्फ> उन लोगों के साथ 15 वर्षों का कार्य अनुभव है, जो अलग-अलग संस्करण नियंत्रण प्रणालियों में अलग-अलग लोगों द्वारा उस समय प्रशिक्षित किए गए हैं और अभी भी मल्टीट्यूड के पाठ फ़ाइलों की प्रतिलिपि बनाते हैं .backup.<timestamp>। मुझे लगता है कि मैंने शुरू में ही यह स्पष्ट कर दिया था कि यह एक राय होगी। दूसरों को उम्मीद है कि एक अधिक तथ्यात्मक अंतर्दृष्टि प्रदान करने में सक्षम हैं, और मुझे आश्चर्य है कि कोई भी अभी तक नहीं है।
cfi

मैं अभी भी नहीं मिला। क्या आप कह रहे हैं कि submoduleप्रयुक्त पुस्तकालयों को शामिल करने का पुराना तरीका subtreeहै और नया चमकदार तरीका है?
लर्नकुरेव

नहीं। डॉक्स कम से कम यह उल्लेख नहीं करते हैं कि दोनों में से कोई भी पदावनत नहीं है। और मेरे लिए डॉक्स का अंतिम कहना है (बग को छोड़कर)। यह एक समान काम को पूरा करने के लिए सिर्फ दो अलग-अलग वर्कफ़्लो हैं। दोनों के फायदे और नुकसान हैं। इस तथ्य के लिए कि किसी भी गुरुद्वारे ने अभी तक उत्तर नहीं दिया है, इस बात की पुष्टि है कि विशेषज्ञ के लिए मतभेद नगण्य हैं। अधिकांश शायद सबट्री मर्ज रणनीति का उपयोग करते हैं क्योंकि यह वह है जो पहले लागू किया गया था और लोग read-tree(और वैसे भी ब्रांचिंग / मर्जिंग / रिमॉट्स) से परिचित हैं । submodulesको जोड़ा गया था
cfi

5

एक वास्तविक उपयोग का मामला जो हमारे पास है जहाँ गिट सबट्री एक मोक्ष था:

हमारी कंपनी का मुख्य उत्पाद उच्च मॉड्यूलर है और अलग-अलग रिपॉजिटरी में कई परियोजनाओं में विकसित किया गया है। सभी मॉड्यूल का अपना अलग रोडमैप है। संपूर्ण उत्पाद कंक्रीट संस्करणों के सभी मॉड्यूल के साथ बना है।

समानांतर में पूरे उत्पाद का ठोस संस्करण हमारे प्रत्येक ग्राहक के लिए अनुकूलित है - प्रत्येक मॉड्यूल के लिए अलग शाखाएं। अनुकूलन को कभी-कभी एक ही बार में कई प्रोजेक्ट में बनाना पड़ता है ( cross-module customization)।

अनुकूलित उत्पाद के लिए एक अलग उत्पाद जीवन चक्र (अनुरक्षण, सुविधा शाखाएं) हमारे पास git सबट्री पेश किया। हमारे पास सभी अनुकूलित मॉड्यूल के लिए एक git-subtree रिपॉजिटरी है। हमारे कस्टमाइज़ेशन कस्टमाइज़िंग शाखाओं की सभी मूल रिपॉजिटरी में रोज़ 'गिट सबट्री पुश' हैं।

इस तरह हम कई रिपोज और कई ब्राच को प्रबंधित करने से बचते हैं। git-subtree ने हमारी उत्पादकता को कई गुना बढ़ा दिया!

अपडेट करें

समाधान के बारे में अधिक जानकारी जो टिप्पणियों पर पोस्ट की गई थी:

हमने एक नया भंडार बनाया। फिर हमने प्रत्येक परियोजना को जोड़ दिया जो ग्राहक शाखा में उस नए रेपो को सबट्री के रूप में थी। हमारे पास एक जेनकींस का काम था जो नियमित रूप से ग्राहक शाखा में मूल रिपॉजिटरी में मास्टर परिवर्तन को पीछे धकेल रहा था। हमने फीचर और रखरखाव शाखाओं के साथ टिपिकल गिट फ्लो का उपयोग करके सिर्फ "क्लाइंट रेपो" के साथ काम किया।

हमारे 'क्लाइंट' रेपो में स्क्रिप्ट्स का निर्माण भी था जिसे हमने इस विशेष क्लाइंट के लिए अनुकूलित किया।

हालाँकि प्रस्तुत समाधान का एक गड्ढा है।

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


मारेक, मैं एक ही स्थिति की तरह लग रहा है के साथ सामना कर रहा हूँ और मैं संभावनाओं में git और floundering के लिए अपेक्षाकृत नया हूँ। मैं आपके सेटअप के बारे में अधिक जानना चाहूंगा।
goug

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

नुकसान यह था कि हम उत्पाद के मुख्य मूल विकास से दूर और आगे जा रहे थे। तो उस विशेष ग्राहक के लिए संभावित उन्नयन अधिक से अधिक कठिन था। हमारे मामले में यह ठीक था क्योंकि सबट्री से पहले परियोजना की स्थिति पहले से ही मुख्य पथ का एक रास्ता रही थी, इसलिए उपप्रकार कम से कम आदेश और डिफ़ॉल्ट गिट प्रवाह को पेश करने की संभावना का परिचय देता है।
१els पर मारेक जगिएल्स्की

एक और बात यह है कि हमारे 'क्लाइंट' रेपो ने भी स्क्रिप्ट का निर्माण किया था जिसे हम इस विशेष क्लाइंट के लिए भी स्वीकार कर रहे थे।
मर्क जग्ल्सकी

1
मैं आपको अपने उत्तर में टिप्पणियों से अपनी अतिरिक्त जानकारी शामिल करने की सिफारिश करना चाहता हूं; वे निश्चित रूप से इसका बेहतर जवाब देते हैं।
जेम्स स्कम्प

5

मूल रूप से गिट-उपटिट गिट-सबमॉडल दृष्टिकोण के लिए विकल्प हैं: कई कमियां हैं या यों कहें कि मैं गिट-सबमॉड्यूल का उपयोग करते समय आपको बहुत सावधान रहने की आवश्यकता है। उदाहरण के लिए जब आपके पास "एक" रेपो है और "एक" के अंदर आपने सबमॉड्यूल का उपयोग करके "दो" नामक एक और रेपो जोड़ा है। जिन बातों का आपको ध्यान रखना चाहिए:

  • जब आप "दो" में कुछ बदलते हैं, तो आपको "दो" के अंदर प्रतिबद्ध और पुश करने की आवश्यकता होती है, यदि आप शीर्ष स्तर की निर्देशिका में हैं (यानी "एक" में) तो आपके परिवर्तन उजागर नहीं होंगे।

  • जब कोई अज्ञात उपयोगकर्ता आपके "एक" रेपो को क्लोन करने की कोशिश करता है, तो "एक" क्लोनिंग के बाद उस उपयोगकर्ता को "दो" रेपो प्राप्त करने के लिए सबमॉड्यूल को अपडेट करने की आवश्यकता होती है।

ये कुछ बिंदु हैं और बेहतर समझ के लिए मैं आपको यह वीडियो देखने की सलाह दूंगा: https://www.youtube.com/watch?v=UQvXst5I41I

  • ऐसी समस्याओं को दूर करने के लिए सबट्री दृष्टिकोण का आविष्कार किया जाता है। Git-subtree के बारे में मूल बातें जानने के लिए, इस पर एक नज़र डालें: https://www.youtube.com/watch?v=t3Qhon7burE

  • मुझे लगता है कि सबटूडल्स की तुलना में सबट्री का दृष्टिकोण अधिक विश्वसनीय और व्यावहारिक है :) (मैं इन चीजों को कहने के लिए बहुत शुरुआती हूं)

चियर्स!


2

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

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

इसलिए यदि एक कोड आधार भारी रूप से संशोधित किया गया है, तो यह बहुत तेज़ी से बढ़ेगा।

हालाँकि, दी गई भंडारण की कीमतें हमेशा कम होती हैं, यह एक महत्वपूर्ण कारक नहीं हो सकता है।


भंडारण समस्या नहीं है। एन्ट्रॉपी समस्या है ! उदाहरण के लिए, आपके पास 1000 उपकरण हैं जो 10KB से लेकर 100KB तक के हैं, प्रत्येक में 35 GB कहने का एक सामान्य कोडबेस साझा है (क्योंकि इसमें विभिन्न स्रोतों से बड़ी संख्या में मॉड्यूल शामिल हैं)। सबमॉड्यूल्स के साथ आप सभी के लिए लगभग 36 जीबी स्थानांतरण करते हैं, लेकिन शायद 1 से अधिक टीबी जीआईटी सबट्री के साथ! यह भी ध्यान रखें कि अगर यह आता है git gcऔर ZFS डेडप (ऑब्जेक्ट पैक्स) में सबमॉड्यूल का स्पष्ट रूप से अनुचित लाभ होता है । इसलिए AFAICS छोटे कोडबेस (रेपो साइज वार नॉट रेपो काउंट वाइज) को सबमॉडल्स के साथ जाना चाहिए, मॉनसून के साथ बड़े। मुझे अभी तक सबट्री के लिए कोई उपयोग नहीं मिला।
टीनो

@tino Git सामान्य कोड के साथ उप-योग घटा देगा। मैंने पुष्टि करने के लिए कुछ प्रयोग किए। चेक आउट कोड के लिए, आपको ZFS जैसी किसी चीज़ को चलाना होगा। लेकिन पनडुब्बी अलग नहीं हैं।
मथायस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.