2010-03-19 13 views
5

मैं ऐसी स्थिति में हूं जहां मैं गिट का उपयोग कर अकेला हूं, हर कोई svn का उपयोग कर रहा है। मैंने टीम svn से कनेक्ट करने के लिए 'git svn' का उपयोग किया है और ज्यादातर यह ठीक काम करता है। हाल ही में, मैंने शुरुआत में एक परियोजना शुरू की है, अलग-अलग गिट रेपो और अब मुझे इसकी सामग्री एसवीएन में मर्ज करने की जरूरत है। हालांकि, मैं अभी भी रिलीज के बीच अपनी गोपनीयता में कार्यान्वयन को ट्विक करना चाहता हूं।गिट से svn तक चेरी-पिकिंग (या, गीट में प्रोजेक्ट इतिहास कैसे रखें और svn में रिलीज़ करें)

तो, चेरी के लिए सबसे सरल तरीका क्या होगा- मेरे निजी रेपो से एसवीएन-क्लोन रेपो में कुछ काम करता है? आवश्यकता पूर्ण स्थानीय इतिहास रखना है और प्रत्येक पिक के लिए केवल एक svn प्रतिबद्ध है। या क्या कुछ squashing किया जाना है?

इसे प्राप्त करने के तरीके के रूप में, क्या निजी रेपो को svn-cloned repo के लिए एक और मूल के रूप में प्राप्त करने का कोई तरीका है?

उत्तर

2

आप अपने गिट रेपो से git dcommit git svn repo से पहले git graft पर गिट-एसवीएन रेपो की प्रतिबद्धता के लिए प्रयास कर सकते हैं।

आपके रेपो से प्रतिबद्धता को एक विशेष शाखा में अलग किया जा सकता है, जब एक क्लीनर इतिहास निर्यात करने के लिए all kind of squashing हो सकता है।

1

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

एक अधिक गहराई से समाधान के लिए, git commit-tree का उपयोग कर सीधे पर विचार - पेड़ आप प्रतिबद्ध करने के लिए चाहते हैं के साथ प्रदान करते हैं (git show --format=raw HEAD चल रहा है और दूसरी पंक्ति ("पेड़") को देखकर पाया), सही माता-पिता के लिए प्रतिबद्ध (जो भी वर्तमान में विचलन में है) और stdin पर सही लॉग संदेश। यह सीधे नलसाजी का उपयोग कर रहा है, शायद आप इसे करने के लिए एक स्क्रिप्ट लिखना चाहते हैं ... प्रभाव यह है कि आपने एक मौजूदा प्रतिबद्धता की फ़ाइल सामग्री वाली एक नई प्रतिबद्धता बनाई है (चेरी-पिक के साथ तुलना करें, जो लेता है पेड़ की प्रतिलिपि बनाने के बजाए मौजूदा प्रतिबद्धता द्वारा जोड़ा गया अंतर)।

+0

हां, मैं अभी के लिए एकमात्र गिट उपयोगकर्ता हूं। क्या इस बात का जिक्र होगा कि सभी भावी काम क्लोन एसवीएन में किए जाएंगे? क्लोन एसवीएन रेपो कुछ भी खाली नहीं है ... हालांकि, यह कुछ भी नहीं बदल सकता है। तो, संक्षेप में, मैं फिर से कह सकता हूं कि मेरी परियोजना वास्तव में एक उपप्रोजेक्ट है जिसे एक ही ट्रंक में विलय किया जा सकता है जिसमें कई संबंधित परियोजनाएं हैं जो अपनी निर्देशिका में हैं। – Jawa

+0

रेपो में काम करने का कोई कारण नहीं है जिसे सीधे उपversण से क्लोन किया गया है, लेकिन आप उन शाखाओं पर काम करना चाहते हैं जिनके उपरोक्त क्लोन उनके माता-पिता के रूप में हैं। आप अपने पुनर्निर्मित संदर्भों को इंगित करने के लिए अपनी वर्तमान कार्यशील शाखाओं को सेट करने के लिए पुनर्निर्मित शाखाओं को वापस अपने कार्य भंडार में खींचकर और 'गिट शाखा-एफ' का उपयोग करके प्राप्त कर सकते हैं। –