2012-05-04 18 views
5

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

मैं आपको यह विकल्प दिखाई और मुझे लगता है कि यह है कि मैं क्या उपयोग करने के लिए है, लेकिन मैं सक्षम हो यह काम करने के लिए नहीं किया गया है: enter image description here

मैं कम से कम चेकआउट कि मैं चाहता हूँ कैसे कर सकता है?

उत्तर

2

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

नदी के ऊपर पर:

git tag quickie $(git commit-tree $(git rev-parse HEAD:path/to/dir) </dev/null) 

आप:

git fetch upstream quickie 

आप स्वचालित रूप से एक शाखा पर एक सबट्री ट्रैक करने के लिए नदी के ऊपर रेपो चाहते हैं, आप (कर सकते हैं एक उपयुक्त decrypted संस्करण) कुछ इस तरह:

sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x 

जो सरल की तुलना में यह लग रहा है है। इस प्रयास करें:

mkdir ~/tryitout && cd ~/tryitout && git init foo && git init bar --bare 
cat >bar/hooks/post-receive <<'EOF' 
sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x 
EOF 
chmod a+x bar/hooks/post-receive 
cd foo 
mkdir subtree && touch subtree/oooo && git add . && git commit -am- 
git push ../bar master 

देर अपडेट -

आप अन्य रेपो के साथ एक फाइल सिस्टम साझा कर रहे हैं, तो आप ऐसा कर सकते हैं:

git clone --no-checkout /path/to/local/repo/.git subtree 
cd subtree 
git commit-tree origin/rev:subtree </dev/null | xargs git checkout -B peek 

और आप पर चारों ओर उछाल कर सकते हैं सूट को बदलने के द्वारा संशोधित, मूल/मास्टर: शामिल, मूल/अगला: शामिल, मूल/v1.4: somewhereelsenow, जो भी हो।

मैं आम तौर पर बड़े रेपोस के लिए एक "खाली" शाखा है। गिट एक खाली निर्देशिका के एक विशेष मामले को संभालता है:

git mktree </dev/null | xargs git commit-tree | xargs git checkout -b empty 
+1

पेज। HEAD निश्चित रूप से कोई भी संशोधन हो सकता है जिसे आप – jthill

+0

चाहते हैं, लेकिन फिर टैग को बनाए रखने की आवश्यकता नहीं होगी? I.e, यदि रेपो का एक प्रासंगिक हिस्सा बदलता है, तो हमें टैग में उस बदलाव को चुनने की आवश्यकता होगी। या मैं गलतफहमी हूँ? –

+0

@AndrewEisenberg आपको जो कुछ भी लाने जा रहे हैं उसके लिए आपको एक रेफरी चाहिए। मैं विस्तृत समाधान के लिए धन्यवाद एक अपस्ट्रीम ऑटो ट्रैक को एक उपट्री – jthill

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