2008-10-07 19 views
132

क्या गिट में एक भंडार की उपनिर्देशिका जांचना संभव है?गिट में चेकआउट उपनिर्देशिका?

कल्पना कीजिए कि मैं एक नई वर्डप्रेस स्थापना स्थापित कर रहा हूं। मैं अपने प्लगइन और विषय अनुकूलन के लिए दो नए निर्देशिका पैदा करेगा:

  • wordpress/wp-content/plugins/myplugins/
  • wordpress/wp-content/themes/mytheme/

मैं Git के माध्यम से इन निर्देशिकाओं बनाए रखना चाहते हैं। सबवर्सन में, मैं trunk/myplugins/ और trunk/mytheme/ निर्देशिकाओं और उपनिर्देशिकाओं की जांच करके इसे पूरा करूँगा। क्या गिट के पास एक ही भंडार का उपयोग करके एक ही कार्य को पूरा करने का कोई तरीका है?

मैं कुछ गिट प्रतिमान पर नाव खो सकता था, लंबे समय तक एसवीएन उपयोगकर्ता गिट के संपर्क में था।

संपादित करें:Multiple branches विभिन्न सामग्री संग्रहीत करना इसे संभालने का एक दिलचस्प तरीका है।

+2

आप पूरे रेपो की जांच क्यों नहीं करते हैं, और उपनिर्देशिकाओं के साथ एक प्रतीकात्मक लिंक बनाते हैं जिसके साथ आप काम करना चाहते हैं? – lhe

+3

संभावित डुप्लिकेट [क्या गिट रिपॉजिटरी की उप-निर्देशिका को क्लोन करने का कोई तरीका है?] (Http://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-repositorys -सब-निर्देशिका-केवल) – MariuszS

+0

[यहां सरल जवाब] (http://stackoverflow.com/a/2466755/287948)। –

उत्तर

109

Sparse checkoutsnow in Git 1.7 हैं।

यह भी प्रश्न "Is it possible to do a sparse checkout without checking out the whole repository first?" देखें।

ध्यान दें कि स्पैस चेकआउट के लिए आपको अभी भी डाउनलोड करने की आवश्यकता है, भले ही कुछ फाइलें गिट डाउनलोड आपके काम करने वाले पेड़ में समाप्त नहीं होंगी।

+1

वूट! अद्यतन के लिए धन्यवाद। –

+1

जहां 'गिट क्लोन' सरल कमांड है ?? खैर, मैं [इस जवाब] का उपयोग कर रहा हूं (http://stackoverflow.com/a/2466755/287948), काम कर रहा है! –

18

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

यदि आप जोर देते हैं (या वास्तव में इसकी आवश्यकता है), हालांकि, आप केवल mytheme और myplugins निर्देशिकाओं के साथ एक गिट रिपोजिटरी बना सकते हैं और वर्डप्रेस इंस्टॉल के भीतर से सिमलिंक कर सकते हैं।


MDCore लिखा है:

एक करने के लिए प्रतिबद्ध है, जिससे जैसे, mytheme myplugin

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

गिट में एक ही भंडार में जो चीज़ों को एक साथ रखना है, उसके लिए एकमात्र मानदंड यह है कि क्या यह एक इकाई है, यानी। आपके मामले में क्या परिवर्तन हैं जहां अलगाव में प्रत्येक निर्देशिका में संपादन को देखने के लिए यह समझ में नहीं आता है। यदि आपके पास ऐसे परिवर्तन हैं जहां आपको एक ही समय में दोनों निर्देशिकाओं में फ़ाइलों को संपादित करने की आवश्यकता है और संपादन एक साथ हैं, तो उन्हें एक संग्रह होना चाहिए। यदि नहीं, तो उन्हें एक साथ ग्लोम मत करो।

गिट वास्तव में वास्तव में चाहता है कि आप अलग-अलग इकाइयों के लिए अलग-अलग भंडारों का उपयोग करें।

submodules

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

+0

धन्यवाद; वह संशोधन संख्या वाले गिट के बारे में एक मस्तिष्क फार्ट था :) – MDCore

+0

जहां 'गिट क्लोन' सरल कमांड अनुक्रम ?? खैर, मैं [इस जवाब] का उपयोग कर रहा हूं (http://stackoverflow.com/a/2466755/287948), काम कर रहा है! –

3

आप एक भंडार की एक निर्देशिका को चेकआउट नहीं कर सकते हैं क्योंकि संपूर्ण भंडार को .svn निर्देशिकाओं के विचलन के बजाय प्रोजेक्ट की जड़ में एकल .git फ़ोल्डर द्वारा नियंत्रित किया जाता है।

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

उप-परियोजनाओं के लिए तोड़फोड़ प्रतिमान svn:externals जो Git में submodules लिए कुछ हद तक तब्दील है (लेकिन वास्तव में स्थिति में आप का उपयोग किया है नहीं SVN:। बाह्य से पहले)

10

वास्तव में, "संकीर्ण" या "आंशिक" या "स्पैस" चेकआउट वर्तमान में हैं, गिट के लिए भारी विकास। नोट, आपके पास अभी भी .git के तहत पूर्ण भंडार होगा। इसलिए, अन्य दो पद गिट की वर्तमान स्थिति के लिए वर्तमान हैं लेकिन दिखता है जैसे हम अंततः स्पैस चेकआउट करने में सक्षम होंगे। Checkout the mailing lists यदि आप अधिक जानकारी में रुचि रखते हैं - वे तेजी से बदल रहे हैं।

+0

जानना अच्छा है! मुझे एक भंडार के तहत ऐसी बारीकी से संबंधित निर्देशिकाएं पसंद हैं, और यदि संभव हो तो यह करूँगा। –

1

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

यदि आप निर्देशिकाओं की जोड़ी को एक इकाई के रूप में देखना चाहते हैं, तो आप अपने रेपो की जड़ के रूप में 'वर्डप्रेस/डब्ल्यूपी-कंटेंट' का उपयोग कर सकते हैं और सब कुछ अनदेखा करने के लिए शीर्ष स्तर पर .gitignore फ़ाइल का उपयोग कर सकते हैं लेकिन दो उपनिर्देशिकाएं ब्याज। यह शायद इस बिंदु पर सबसे उचित समाधान है।

स्पैस चेकआउट कथित रूप से दो साल से आ रहे हैं, लेकिन अभी भी गिट डेवलपमेंट रेपो में उनका कोई संकेत नहीं है, न ही कोई संकेत है कि आवश्यक परिवर्तन कभी भी वहां पहुंचेंगे। मैं उन पर भरोसा नहीं करता।

10

एक चीज मुझे स्पैस चेकआउट के बारे में पसंद नहीं है, यह है कि यदि आप एक उपनिर्देशिका को चेकआउट करना चाहते हैं जो कुछ निर्देशिका गहरी है, तो आपकी निर्देशिका संरचना में सभी निर्देशिकाएं होनी चाहिए।

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

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