2012-08-06 20 views
25

के साथ केवल एक उपनिर्देशिका क्लोनिंग मेरे पास एक गिट भंडार है जिसमें उपनिर्देशिकाएं शामिल हैं। उदाहरण डीआईआरए/डीआईआरबी। क्या एक उपनिर्देशिका (डीआईआरबी) से केवल फाइलों को खींचने के लिए यूनिक्स सर्वर पर git clone करने का कोई तरीका है?गिट

क्या क्लोन के अलावा कुछ अन्य गिट कमांड है जो ऐसा करेगा?

मैं एक विशिष्ट फ़ाइल कैसे गिट कर सकता हूं?

+6

http://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-repositorys-sub-directory- केवल – supervacuo

+1

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

उत्तर

2

यदि आप अपने भंडार के केवल कुछ हिस्सों को क्लोन करना चाहते हैं, तो आपको git submodules पर देखना चाहिए।

उपनिर्देशिका को एक विशिष्ट गिट भंडार द्वारा प्रबंधित किया जाता है और मुख्य भंडार में एक सबमिशन के रूप में संदर्भित किया जाता है।

जब आप मुख्य भंडार क्लोन करते हैं, तो submodules स्वचालित रूप से क्लोन नहीं होते हैं।

+3

जब आप मुख्य भंडार क्लोन करते हैं, तो submodules स्वचालित रूप से क्लोन नहीं होते हैं? क्यूं कर? यह बेतुका है :( – hugemeow

+7

यह सवाल का जवाब नहीं देता है। यह मूल रूप से कहता है: "मेरे पास आपके प्रश्न का उत्तर नहीं है, इसलिए मैं एक और सवाल का जवाब दूंगा, क्योंकि मुझे लगता है कि आपको इसके बजाय क्या करना चाहिए।" –

+0

@EduardoBezerra बिल्कुल। मैं एक जवाब पसंद करता हूं और फिर विकल्प पर एक टिप्पणी पसंद करूंगा। ब्रूनो थॉमस उत्तर –

0

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

+0

हां, गिट एक भंडार पर काम करता है, हालांकि, डेटा गतिशीलता चुनौतियों के कारण हल्का चेकआउट रखने की इच्छा अधिक है। – cgseller

28

मान लें कि आपकी परियोजना project नामक एक डीआईआर में है, और आप केवल उन लोगों को चाहते हैं जो project/dirB स्पर्श करते हैं।

तब:

git clone project/ subproject/ 
cd subproject 
git filter-branch --prune-empty --subdirectory-filter dirB HEAD 

subproject अब Git इतिहास जो dirB छू लेती है शामिल होंगे।

+0

एक आकर्षण की तरह काम करता है ...! – Ahsan

+2

यह केवल प्रारंभिक उप-निर्देशिका सामग्री को पकड़ने के लिए बहुत अच्छा काम करता था, लेकिन जब मैंने बाद में 'पुल' निष्पादित किया तो यह मूल शाखा के साथ विलय हो गया ... – monkut

+0

यदि आप पूरी तरह से गिट इतिहास नहीं चाहते हैं, तो '- -डेप 0' ध्वज। – CelticParser

1

मैं एक समाधान साझा करना चाहते हैं। आप पूरे रेपो क्लोन कर सकते हैं, और फिर उपनिर्देशिका के लिए एक symulink बनाएँ:

mkdir <repo_dir> 
cd <repo_dir> 
git clone <repo_url> 
ln -s <sub_dir> <your_location_where_you_want_to_checkout_sub_dir> 

फिर, यह एक समाधान नहीं है - सिर्फ एक वैकल्पिक हल। आप अभी भी पूरे रेपो क्लोन करेंगे, और आप केवल परिवर्तनों को खींच सकते हैं। हालांकि, यह मेरे कुछ मामलों में उपयोगी था।

0

यह वास्तव में क्लोनिंग नहीं है, लेकिन अगर तुम सिर्फ के साथ एक नया रेपो शुरू करने के लिए एक परियोजना का एक हिस्सा चाहते हैं तो आपका रेपो में जाकर

git archive master <subdir> | tar -x -C /somewhere/else 

फिर/कहीं/और जाना और वहाँ एक नया रेपो शुरू है ।