मैं अपने काम करने वाले गिट रिपॉजिटरी में एक रिमोट गैट रिपॉजिटरी को इसके एक उपनिर्देशिका के रूप में मर्ज करना चाहता हूं। मैं परिणामी रिपॉजिटरी को दो रिपॉजिटरी के मर्ज किए गए इतिहास को सम्मिलित करना चाहूंगा और यह भी कि मर्ज किए गए रिपॉजिटरी की प्रत्येक फाइल अपने इतिहास को बनाए रखती है क्योंकि यह रिमोट रिपॉजिटरी में थी। मैंने सबट्री रणनीति का उपयोग करने की कोशिश की जैसा कि उप-मर्ज की रणनीति का उपयोग करने के तरीके में उल्लेख किया गया है , लेकिन उस प्रक्रिया का पालन करने के बाद, हालांकि परिणामी रिपॉजिटरी में वास्तव में दो रिपॉजिटरी के मर्ज किए गए इतिहास शामिल हैं, रिमोट से आने वाली व्यक्तिगत फाइलें उनके इतिहास को बरकरार नहीं रखती हैं। (उनमें से किसी पर `गिट लॉग 'सिर्फ एक संदेश" मर्ज की गई शाखा ... ") दिखाता है।
इसके अलावा, मैं सबमॉड्यूल का उपयोग नहीं करना चाहता क्योंकि मैं नहीं चाहता कि दो संयुक्त गिट रिपॉजिटरी अब अलग हो जाएं।
क्या दूरस्थ रिपॉजिटरी से अपने इतिहास को बनाए रखने वाली व्यक्तिगत फ़ाइलों के साथ एक उपनिर्देशिका के रूप में एक दूसरे में एक दूरस्थ गिट रिपॉजिटरी को मर्ज करना संभव है?
किसी भी मदद के लिए बहुत बहुत धन्यवाद।
संपादित करें: मैं वर्तमान में एक समाधान की कोशिश कर रहा हूं जो मर्ज किए गए भंडार इतिहास को फिर से लिखने के लिए गिट फिल्टर-शाखा का उपयोग करता है। यह काम करने लगता है, लेकिन मुझे इसे कुछ और परखने की जरूरत है। मैं अपने निष्कर्षों पर रिपोर्ट करने के लिए लौटूंगा।
संपादित 2: आशा है कि मैं अपने आप को और अधिक स्पष्ट करता हूं मैं सटीक कमांड देता हूं जिसका उपयोग मैंने गिट की उप-रणनीति रणनीति के साथ किया है, जिसके परिणामस्वरूप दूरस्थ रिपॉजिटरी की फ़ाइलों के इतिहास का स्पष्ट नुकसान होता है। आज्ञा देना एक git प्रतिनिधि मैं वर्तमान में काम कर रहा हूँ और B git प्रतिनिधि मैं इसे एक उपनिर्देशिका के रूप में ए में शामिल करना चाहूंगा। इसने निम्नलिखित कार्य किया:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
इन कमांड्स के बाद और डायरेक्टर सबडिर / Iwant / in / put / B / in में जाने पर, मुझे B की सभी फाइलें दिखाई देती हैं, लेकिन git logउनमें से किसी एक पर बस कमिट मैसेज दिखाता है "subgeir / Iwant / put / में subdirectory के रूप में Merge B / बी / में। " उनका फ़ाइल इतिहास जैसा कि B में है खो गया है।
काम करने के लिए क्या लगता है (जब से मैं शुरुआत में गलत हूं मैं गलत हो सकता हूं) निम्नलिखित है:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&subdir/Iwant/to/put/B/in/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
git checkout master
git merge B_branch
फ़िल्टर-शाखा के लिए ऊपर की कमान से ली गई है git help filter-branch, जिसमें मैंने केवल उप-पथ को बदल दिया है।
gitkइतिहास के बारे में क्या कहता है? मैंने अतीत में git सबट्री मर्ज का सफलतापूर्वक उपयोग किया है। शायद आप अपने सटीक आदेशों को प्रकट कर सकते हैं? मुझे यकीन नहीं है कि गिट-फ़िल्टर-शाखा सही दृष्टिकोण है। मैं एक नए इतिहास को संश्लेषित करने के लिए गिट-फास्ट-एक्सपोर्ट और गिट-फास्ट-इम्पोर्ट की कोशिश कर सकता हूं।