2010-03-11 12 views
104

के साथ विशिष्ट निर्देशिका को कैसे खींचें मेरे पास गिट के साथ एक प्रोजेक्ट है, और मैं सिर्फ एक विशिष्ट निर्देशिका को क्लोन करना या खींचना चाहता हूं, जैसे myproject/जावास्क्रिप्ट जैसे सबवर्सन करता है।
कुछ बदलाव करें, प्रतिबद्ध करें और दोबारा दबाएं।
यह संभव है?गिट

+3

स्पैस चेकआउट आपको रूचि दे सकता है (भले ही आपको अभी भी सबकुछ लाने की आवश्यकता हो): http://stackoverflow.com/questions/2416815/how-to-git-pull-all-but-one-folder/2416991# देखें 24169 9 1 – VonC

उत्तर

143
  1. अपने रेपो प्रतिलिपि के शीर्ष में सीडी
  2. git fetch
  3. git checkout HEAD path/to/your/dir/or/file

    • कहाँ "path/..." में (3) निर्देशिका पर शुरू होता है बस नीचे दिए गए रेपो जड़ युक्त अपने ".../file"
+2

यह जवाब है ... धन्यवाद! – Paul

+1

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

+0

आपने प्रश्न के शीर्षक को संबोधित किया, जो कि काफी अच्छा है। यह सिर्फ मुझे बचाया, जहां तक ​​मेरा संबंध है, यह सही जवाब है - खासकर जब से इस मुद्दे के लिए Google पर यह शीर्ष हिट था। – Morgon

15

यह संभव नहीं है। आपको सभी भंडार या कुछ भी खींचने की जरूरत नहीं है।

+1

भले ही आपको * सबकुछ * लाने की ज़रूरत है, फिर भी इस मामले में एक स्पैर चेकआउट काम करने वाले पेड़ पर एक खींच होगी? Http://stackoverflow.com/questions/2416815/how-to-git-pull-all-but-one-folder/2416991#2416991 – VonC

+10

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

+0

वर्ग्यूशन का उत्तर नीचे मेरे लिए काम किया। – Paul

-1

शिंगारा सही है। इस व्यवहार का एक स्पष्टीकरण this mailing list thread में दिया गया है। यदि आप वास्तव में ऐसा करना चाहते हैं, तो आप जावास्क्रिप्ट डीआईआर को एक सबमिशन बना सकते हैं।

+3

आपने अपनी टिप्पणी में प्रश्न का उत्तर नहीं दिया, आपने एक लिंक प्रदान किया। यदि लिंक कभी भी मर जाता है तो आपका लिंक बेकार है, जैसा आपका जवाब है। इसके अलावा लिंक पर क्या बहुत संक्षिप्त और पढ़ने में आसान नहीं है। यदि आपका लिंक सारांश में था या सरलीकृत किया गया तो आपका उत्तर उपयोगी होगा। – leetNightshade

0

कभी-कभी, आप बस diff के माध्यम से जाने के rigmarole के बिना फ़ाइलों की पिछली प्रतियों पर एक नज़र रखना चाहते हैं।

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

4

मैं देखता हूं। मैं submodules बनाने की कोशिश करेंगे और देखें कि मेरे लिए काम करता है या नहीं। मैं परिणामों की रिपोर्ट करूंगा। संपादित करें: स्पैस चेकआउट और submodules मेरे लिए काम किया।लिंक मैं (VonC और मिशेल जेंसन द्वारा दिए गए) के बारे में पढ़ा करते थे:

How to git-pull all but one folder

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

http://vmiklos.hu/blog/sparse-checkout-example-in-git-1-7

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

git submodule update

+0

गिट की उप-मॉड्यूल सुविधा विशेष रूप से अच्छी तरह लागू नहीं होती है। वे काम करने के लिए बहुत अजीब और भ्रमित हो सकते हैं। मैं व्यक्तिगत रूप से गिट सब-मॉड्यूल से स्पष्ट रूप से स्पष्ट हो जाता हूं जब तक कि सभी कंकों को लोहे से बाहर नहीं किया जाता है। – user2268788

7

शायद यह आदेश सहायक हो सकता है:

git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar 

"एट देखा"

+2

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

46

एक खाली निर्देशिका में:

git init 
git remote add [REMOTE_NAME] [GIT_URL] 
git fetch REMOTE_NAME 
git checkout REMOTE_NAME/BRANCH -- path/to/directory 
+5

यह स्वीकार्य उत्तर नहीं था जब यह मेरे लिए काम किया। –

+4

यह ओपी का सही जवाब है। –

+0

यह काम करता है यदि आप केवल स्थानीय फ़ाइल को प्रतिस्थापित करने के लिए फ़ाइल के दूरस्थ संस्करण का उपयोग करना चाहते हैं, तो मुझे लगता है कि – John

8

ज्यादा, एक जवाब की तलाश में नहीं लग रहा दे, फिर से और इतने पर की कोशिश कर रहा, के बाद, मैं अंत में करने के लिए एक समाधान नहीं मिला यह एक और एसओ सूत्र में:

How to git-pull all but one folder

में कॉपी-पेस्ट क्या नहीं है:

git init 
git remote add -f origin <url> 
git config core.sparsecheckout true 
echo <dir1>/ >> .git/info/sparse-checkout 
echo <dir2>/ >> .git/info/sparse-checkout 
echo <dir3>/ >> .git/info/sparse-checkout 
git pull origin master 

ओपी चाहता है (केवल एक डीआईआर पर काम करें) करने के लिए, ऊपर दिए गए चरणों को करते समय, उस डीआईआर को .git/info/sparse-checkout पर जोड़ें।

@cforbish के लिए बहुत सारे धन्यवाद!

+2

मैं इसे यहां पोस्ट कर रहा हूं क्योंकि जब भी मैं Google को यह करने का प्रयास करता हूं, तो यह एक शीर्ष परिणाम है, और वह धागा है प्रदर्शित होने के करीब भी नहीं। :(मुझे बुरा प्रतिलिपि लग रहा है, लेकिन मुझे लगता है कि यह सबसे अच्छा प्रथा है? – msb