2012-10-19 11 views
8

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

मैं गिट सबट्री का उपयोग करके अपने मुख्य रेपो में उप-रेपो से एक प्रतिबद्धता कैसे चुनूं? इसके बाद मैं उप-रेपो के इतिहास में एक विशिष्ट प्रतिबद्धता पर कैसे जा सकता हूं जब मैंने पहले से ही उस उपसर्ग पर गिट सबट्री खींच लिया है?

मैं मुख्य रूप से इसे स्क्वैश प्रतिबद्ध मोड में चला रहा हूं।

उत्तर

5

मैं उप-रेपो के इतिहास में एक विशिष्ट प्रतिबद्धता पर कैसे जा सकता हूं?

यदि आपने काम किया है, तो कोई रास्ता नहीं है, क्योंकि स्क्वैश अलग-अलग काम करता है।

अन्यथा, एक गैर-squashed subtree के साथ, आप केवल उसी हैश के साथ उपट्री के किसी भी प्रतिबद्धता पर नेविगेट कर सकते हैं, जिसमें मूल भंडार है जिसमें से उपट्री बनाई गई थी।

git subtree (स्क्वैश के बिना) वास्तव में आपके भंडार में आपके वर्तमान रेपो के भीतर एक बाहरी पेड़ के रूप में बाह्य भंडार से सभी प्रासंगिक काम करता है। जब आप git subtree add करते हैं तो आप देख सकते हैं कि कई प्रतिबद्धताओं को जोड़ा जाता है (बाहरी रेपो से सभी मूल काम करता है) और अंतिम विलय प्रतिबद्धता जो उस सबट्री से सामग्री को --prefix विकल्प के साथ निर्दिष्ट निर्देशिका में ले जाती है। संक्षेप में, यह किसी अन्य असंबंधित भंडार से एक शाखा की जांच करता है और फिर उस सामग्री को किसी दिए गए सबफ़ोल्डर में ले जाकर अपनी वर्तमान शाखा में विलीन कर देता है।

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

यह हमें दूसरे के लिए ले जाता है:

मैं कैसे चेरी का चयन कैसे करूँ एक Git सबट्री का उपयोग कर अपने मुख्य रेपो में एक उप रेपो से प्रतिबद्ध?

ऐसा लगता है कि मौजूदा "चेरीपिकिंग" वर्तमान में git subtree द्वारा समर्थित नहीं है। लेकिन उपर्युक्त सभी के प्रभावों को निम्नलिखित किया जा सकता है।

# move yourself to the subtree commit of your choice 
git checkout <subtree-hash> 

# fetch commits from the subtree repository, to have available the commit you want 
# to cherry pick. 
git fetch <path-to-remote> 

# cherry pick the hash you want 
git cherry-pick <cherry-hash> 

# move back to your original branch 
git checkout <your-branch> 

# subtree merge your cherry pick (using the previous HEAD), 
# so that it gets moved to the correct location specified by prefix. 
git subtree merge --prefix <subtree-prefix> [email protected]{1} 

# Since you probably fetched more commits that you needed from 
# the remote, you might want to clean those that where not needed 
git gc 

को ध्यान में रखना है कि ऐसा करने के बाद आप एक अद्यतन अपने सबट्री में git subtree pull करने की कोशिश करता है, तो है, और यह वादा आप चेरी उठाया भी शामिल है, यदि आप एक संघर्ष के साथ खत्म हो जाएगा, क्योंकि आप एक ही स्थान पर दो परिवर्तन होगा ।

यदि आपके पास मूल सबट्री रिपोजिटरी तक पहुंच है, तो एक और आसान विकल्प है, चेरी को शाखा में वहां ले जाना और फिर उस विशिष्ट शाखा को git subtree pull बनाना है।

+1

मैंने 'गिट संस्करण 1.8.1' का उपयोग करके, इस तरह से जांच की, जिसमें पहले से ही subtree कमांड शामिल है। – LopSae

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

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