2012-04-19 15 views
16

संक्षिप्त प्रश्न: केवल संख्याबद्ध प्रतिबद्धता (svn संख्या के साथ) को अपडेट करने के लिए svn up -r r1130 के गिट-एसवीएन समतुल्य क्या है?क्या मैं एक निश्चित svn संशोधन के लिए svn rebase गिट सकता हूँ? (Svn up -r के समान ...)

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

मैं भूल रहा हूं कि मैंने अतीत में यह कैसे किया है और स्वयं को खोजने के लिए खोज रहे हैं और सहायता पृष्ठ सबसे अच्छा तरीका खोजने की कोशिश कर रहा है। शायद एक अलग शब्द Q & ए है जो मुझे याद आ रही है?

साफ पेड़ पर पुराने संशोधन को देखने के लिए यह आसान है, लेकिन जब मैं पेड़ के शीर्ष पर काम करता हूं, तो "इसके ऊपर अपने काम को फिर से चलाने के लिए रीवाइंडिंग हेड ..." भाग मुझे आमतौर पर प्यार का मतलब है कि मेरे परिवर्तन जोड़े जाने से पहले मैं पेड़ में एक बिंदु पर जाउंगा!

अभी के लिए, मैं git svn rebase पर जा रहा हूं और फिर उन कामों को वापस करने के लिए अंतःक्रियात्मक रूप से पुन: प्रयास कर रहा हूं जो मुझे नहीं चाहिए, लेकिन मुझे विश्वास है कि यह करने का यह सबसे अच्छा या यहां तक ​​कि एक अच्छा तरीका है।

उत्तर

18

मैं rebase पसंद करता हूं क्योंकि dcommit से पहले गिट-एसवीएन को आपके परिवर्तनों को फिर से भरना होगा। ऐसा करें:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b master_r1241   # Create a new brach matching it 
git checkout hwTesting     # Merge previously created changes 
git rebase master_r1241    # rebase on top of not quite up-to-date master branch 

आप एक कदम भी ऐसा कर सकता है: (हमेशा बातें बहुत गलत हो जाते हैं reflog या rebase --abort का उपयोग कर वापस लौटने सकता है)।

git checkout hwTesting     # Checkout feature branch 
git rebase `git svn find-rev r1241` # rebase on top of not quite up-to-date master branch 
+0

मुझे अंततः इसे आज़माने का मौका मिला और इसका एक चरण संस्करण वही है जो मैं ढूंढ रहा था। धन्यवाद! – sage

1

एक कदम में ऐसा करने का कोई तरीका नहीं प्रतीत होता है। हालांकि, आप किसी दिए गए svn संशोधन संख्या के लिए संबंधित गिट प्रतिबद्ध आईडी आसानी से पा सकते हैं। इसे आज़माएं:

git svn find-rev rN 

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

+0

यह है कि आम तौर पर उपयोगी है एक उपयोगी आदेश है, लेकिन अगर मैं एक शाखा नई करता है और मैं 'Git कि शाखा rebase' svn है कि में हूँ, तो यह SVN प्रतिबद्ध की चोटी पर मेरी नई प्रतिबद्ध पुनः चलाने जाएगा प्रश्न में। आपका आदेश * अनमोडिफाइड * svn प्रतिबद्धता की जांच करेगा, यानी शीर्ष पर किए गए मेरे परिवर्तन किए बिना। शायद मैं यह कर सकता हूं, फिर उस बिंदु पर एक नई शाखा बनाएं, और आखिरकार इस नई शाखा को मेरी फीचर शाखा में मिलाएं? – sage

+0

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

0

मैं इसे संदर्भ के लिए छोड़ दूंगा, क्योंकि स्वीकार किए गए उत्तर का उल्लेख है। एक लाइनर रिबेस विकल्प का उपयोग करें, हालांकि ...


यहां मैं अभी क्या कर रहा हूं। इस बार मैं r1130 से उन्नयन कर रहा हूँ (प्रश्न में आपका उल्लेख) r1241 करने के लिए:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b hwTesting_r1241  # Create a new brach matching it 
git merge hwTesting_r1130    # Merge previously created changes 

यह ज्यादातर मुझे देता है जो मैं चाहता है, लेकिन यह एक और शाखा हर बार मैं अद्यतन spawns। ऐसा लगता है कि गिट को केवल मास्टर पर काम करने के लिए गिट को बताने का कोई तरीका होना चाहिए और git svn find-rev r1241 द्वारा लौटाए गए एक सहित।

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