2010-07-02 13 views
11

यह शायद असामान्य है इसलिए मुझे दृश्य सेट करने दें:गिट और svn के साथ स्रोत प्रबंधित करें - क्या यह समझ में आता है?

हमारे पास हमारे प्रोजेक्ट इतिहास - एक लिनक्स पर आधारित एम्बेडेड सिस्टम वाला एक एसवीएन रेपो है। एसवीएन रेपो में लिनक्स कर्नेल, यू-बूट, व्यस्त बॉक्स इत्यादि और हमारे सभी इन-हाउस ऐप्स, फाइल सिस्टम और ऐसे शामिल हैं।

हमारे पास लिनक्स कर्नेल पुराना और क्रिस्टी है और मैं मुख्य लाइन पर पोर्टिंग पर काम कर रहा हूं, जो हमारे प्लेटफॉर्म के लिए सक्रिय विकास में है। मैं "समुदाय" के साथ गिट और ट्रेडिंग पैच के तहत कर्नेल-साइड काम कर रहा हूं।

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

पूरे प्रोजेक्ट को गिट करने के लिए माइग्रेट करना एक विकल्प नहीं है। गिट के साथ केवल कर्नेल स्रोत का प्रबंधन करना और एसवीएन में गोंद स्क्रिप्ट और संग्रहित हैश का एक समूह होना संभव है, लेकिन पूरे प्रोजेक्ट के लिए एसवीएन से एक एकीकृत इतिहास/diffing क्षमता होना अच्छा है।

जो मैं सोच रहा हूं वह उसी निर्देशिका में एसवीएन और गिट दोनों के साथ कर्नेल स्रोतों को प्रबंधित करने का प्रयास कर रहा है।

कर्नेल देव के रूप में मैं ज्यादातर गिट का उपयोग करता हूं और चीजों को अच्छे लगने पर आंतरिक उपयोग के लिए एक एसवीएन प्रतिबद्ध करता हूं। अन्य आंतरिक उपयोगकर्ताओं के लिए वे एक एसवीएन चेकआउट के साथ पूरे, सुसंगत स्रोत प्राप्त करने में सक्षम होंगे, एक एकीकृत इतिहास देखेंगे, और वे एसवीएन के तहत कर्नेल स्रोतों में परिवर्तन कर सकते हैं। बाद में मैं या अन्य गिट-प्रयोग करने वाले व्यक्ति एसवीएन उन परिवर्तनों को अपडेट कर सकते हैं और उन्हें उपयुक्त के रूप में गिट करने के लिए प्रतिबद्ध कर सकते हैं।

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

तो यह मेरा विचार du jour है। इसका मतलब है कि ज्यादातर सहकर्मियों को गिट के बारे में चिंता करने की ज़रूरत नहीं है, और हम चुपचाप गिट को अनदेखा कर सकते हैं और आवश्यकता के बाद बाद में फोर्क कर सकते हैं।

यहां प्रश्न वास्तव में है, क्या किसी ने ऐसा कुछ किया है, यह कैसे काम करता है, या आप किस वैकल्पिक समाधान के साथ आए हैं?

+1

बाद में, अब मैं थोड़ी देर के लिए ऐसा कर रहा हूं और यह अच्छी तरह से काम करता है। – blueshift

+0

क्या आपको इस मशीन को किसी अन्य मशीन पर क्लोन करने की आवश्यकता है? उदाहरण के लिए, यदि मेरे पास गिट कंट्रोल के तहत एक निर्देशिका है तो इसे उपयुक्त अनदेखा के साथ svn में जोड़ें, लेकिन फिर उसी मशीन को अन्य मशीन पर चाहिए। क्या मुझे गिट रेपो क्लोन करना होगा और फिर उस निर्देशिका में svn repo को चेकआउट करने का प्रयास करें? दूसरी तरह के आसपास? –

+1

यह पता लगाया कि आप दो रिपो को गठबंधन करने के लिए गिट क्लोन करके 'svn checkout --force ' कर सकते हैं। –

उत्तर

6

मैंने इसे नियमित रूप से किया है, और यह बहुत अच्छा काम करता है।

एकमात्र बड़ी चीज जो मुझे करने की ज़रूरत थी वह सबवर्सन अनदेखा सूची में .git फ़ोल्डर जोड़ता था, और .svn/फ़ोल्डरों को .gitignore फ़ाइल में जोड़ता था।

+0

वादा करना! जवाब के लिए धन्यवाद। – blueshift

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

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