मैं उप-रेपो के इतिहास में एक विशिष्ट प्रतिबद्धता पर कैसे जा सकता हूं?
यदि आपने काम किया है, तो कोई रास्ता नहीं है, क्योंकि स्क्वैश अलग-अलग काम करता है।
अन्यथा, एक गैर-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.8.1' का उपयोग करके, इस तरह से जांच की, जिसमें पहले से ही subtree कमांड शामिल है। – LopSae