2009-12-01 10 views
6

की एक उपनिर्देशिका में मौजूदा सीवीएस मॉड्यूल कैसे आयात करूं, मैं एक पुरानी कोड प्रोजेक्ट को पुनर्जीवित कर रहा हूं, जब से मैं एक नई परियोजना में एक घटक के रूप में नियमित रूप से सीवीएस का उपयोग कर रहा था, गिट का उपयोग करने पर काम कर रहा है। मेरे पास अभी भी पुराने प्रोजेक्ट के मॉड्यूल में सीवीएस संग्रह तक पहुंच है, इसलिए मैं केवल प्रतिबद्ध इतिहास प्राप्त करने और वहां से जाने के लिए गिट-सीवीएसपोर्ट का उपयोग करने जा रहा था। हालांकि, यह सिर्फ वर्तमान के अंदर एक नया गिट भंडार बना रहा है। यह पूरी तरह से संभव है मुझे इसे एक मल्टीस्टेप प्रक्रिया के रूप में करने की आवश्यकता है जहां मैं सीवीएस -> ताजा गिट रिपोजिटरी जाता हूं और फिर इसे मौजूदा गिट भंडार में लाने के लिए कुछ और उपयोग करता हूं।मैं मौजूदा गिट रिपॉजिटरी

newproj/newsubdir में यह चल रहा है ($ CVSROOT पहले से ही सही ढंग से मेरी खोल विन्यास में सेट किया गया है):

git cvsimport -k -o master -u -s \- -A ~/Documents/cvs-authors.txt oldproj 

मुझे एक नया भंडार newproj/newsubdir/.git/सही प्रतिबद्ध के सभी (के साथ हो जाता है टिप्पणियां, टाइमस्टैम्प, इतिहास), और हेड के साथ जहां मैं इसे चाहता हूं।

ऐतिहासिक सीवीएस के लिए मैं क्या चाहता हूं जैसे कि वे हमेशा न्यूप्रोज/न्यूजबदीर/पुरानीप्रोजेज-फाइल 1, न्यूप्रोजे/न्यूजबदीर/पुरानीप्रोज़-फाइल 2, आदि में रहते थे। मेरे अनुभव में, गिट के पास ऐसा करने का जादू है चीज की तरह, लेकिन मुझे मेरी स्थिति के लिए एक स्पष्ट फिट नहीं मिला।

उत्तर

0

पता लगा कि कैसे क्या मैं पर this answer for combining git repositories आधारित चाहते हैं, Git फिल्टर शाखा का उपयोग कर इसे बनाने के लिए के रूप में अगर मॉड्यूल सीवीएस से आयात उपनिर्देशिका मौजूदा Git भंडार

से शुरू में वांछित में सीधे विलय कर दिया गया था करने के लिए निर्देशिका newproj युक्त, मौजूदा Git भंडार:

% git cvsimport -k -u -s \- -A ~/Documents/cvs-authors.txt \ 
    -C newproj-sibling oldproj 
% cd newproj-sibling 
% git filter-branch --index-filter \ 
    'git ls-files -s | gsed "s-\t-&subdir/of/newproj/-" | 
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new \ 
    git update-index --index-info && 
    mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD 
% cd ../newproj 
% git pull ../newproj-sibling master 

Git भंडार में लक्षित उपनिर्देशिका मान लिया जाये कि पूरी तरह से नया था, कम से कम नहीं फ़ाइलों को सीवीएस मॉड्यूल में उन लोगों के साथ साझा किया नाम निहित, मर्ज दूर जाना चाहिए अड़चन के बगैर।

एक चेतावनी: मैंने ऊपर gsed है क्योंकि ओएस एक्स के साथ आता है कि बीएसडी sed चरित्र \ N की तरह से बच नहीं सकता है, और मैं अभी तक उपनाम करने के लिए परेशान नहीं किया है।

2

आपके पास तीन विकल्प हैं। वे सभी स्वच्छ cvsimport करने के साथ शुरू करते हैं, तो आगे बढ़ें और ऐसा करें।

  1. संदर्भ जो एक सबमिशन के रूप में रेपो करता है।
  2. रेपो को मौजूदा रेपो में लाएं और इतिहास में शामिल होने के लिए एक उप-विलय विलय करें।
  3. कुछ ऐसा करने के लिए # 3 के समान कुछ करें, और उसके बाद पेड़ को फिर से तैयार करें ताकि पूरे इतिहास में कालक्रम के अनुसार बातचीत की जा सके।

नंबर एक का मतलब है कि बाहरी परियोजना आंतरिक पर निर्भर करती है, लेकिन शायद आपके लिए वांछनीय नहीं है।

नंबर 0 को इस subtree merge howto में समझाया गया है। यह आपके लिए काफी अच्छा हो सकता है।


लेकिन अगर आप एक अच्छा साफ रैखिक इतिहास की तरह है, तो आप # 3 करते हैं और उन्हें उलझन भलाई के लिए कर सकते हैं। मैंने कुछ समय पहले क्लीनअप प्रोजेक्ट में something similar किया था और अभी भी बहुत सारे दस्तावेज और टूल हैं।

मूल विचार सभी परिवर्तनों को एक पैच इतिहास में अलग करना था जो परिवर्तनों का पुनर्निर्माण करेगा। डिफ़ॉल्ट रूप से, यह इतिहास एक प्रकार के भंडार आदेश में है, लेकिन पोस्ट में वर्णित स्क्रिप्ट को चलाने से क्रमिक क्रम में पैच को नए अनुक्रम में पुनर्व्यवस्थित किया जाएगा।

पेड़ हैश आपको यह बताना चाहिए कि आपने वंशावली के अलावा कुछ और नहीं तोड़ दिया है।

क्या मैं इसे फिर से करने के लिए कर रहा था, मैं संभवतया केवल एक गिफ्ट फ़ाइल उत्सर्जित करता हूं और filter-branch करता हूं।

+0

डी ओह आपने उत्तर दिया क्योंकि मैं खुद का जवाब दे रहा था। मेरी अधीरता का अभिशाप! – UltraNurd

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