2010-03-22 15 views
51

-s विकल्प (git svn clone http://server/repo -s) के साथ गिट-एसवीएन का उपयोग करके एक एसवीएन रिपोजिटरी क्लोन करने के बाद, कोई एक शाखा या टैग कैसे बनाता है और dcommit आईएनजी में रिपोजिटरी में प्रासंगिक शाखा/टैग निर्देशिका में कैसे धकेलता है?गिट-एसवीएन: एक नई शाखा/टैग बनाएं और दबाएं?

उदाहरण के लिए; अगर मैं स्थानीय रूप से foobar शाखा बनाने के लिए गिट का उपयोग करना चाहता था (git checkout -b foobar) मैं कैसे गिट-एसवीएन सर्वर पर शाखा (http://server/repo/branches/foobar) बना सकता हूं?

मैं गिट 1.5.5.6 का उपयोग कर रहा हूं।


कृपया ध्यान दें:

नीचे स्वीकार किए जाते हैं विधि Git 1.5.5.6 साथ काम नहीं करता क्योंकि वहां कोई git svn branch विधि। मैं अभी भी इसका समाधान ढूंढ रहा हूं जिसमें सीधे एसवीएन के साथ काम करने का संकल्प शामिल नहीं है।

उत्तर

71

आप इस tutorial में सभी बुनियादी तथ्य विवरण पढ़ सकते हैं, लेकिन सार मूल रूप से निम्नलिखित है:

$ git svn branch -m "Topic branch" my_topic   # Create SVN branch called "my_topic" 
$ git checkout --track -b my-topic remotes/my_topic # Create the Git branch for "my_topic" 
# Hack hack hack... 
$ git svn dcommit --dry-run # Make sure you're committing to the right SVN branch 
$ git svn dcommit    # Commit changes to "my_topic" branch in SVN 
+0

यह ** ** 1.5.5.6 के मेरे गिट संस्करण के साथ काम नहीं करता है - ऐसी कोई आदेश नहीं है 'git svn branch'। –

+9

'गीट svn शाखा' v1.6.1 में जोड़ा गया था। मैं उन्नयन की सिफारिश करता हूं, क्योंकि 1.5.5.6 सालाना डेढ़ साल पुराना है। – mipadi

+0

svn टैग के साथ इसका उपयोग कैसे करें। मैं 'गीट svn टैग-एम' टैग विवरण "0.0.2' के साथ svn टैग बनाते हैं। और अब मैं गिट में उचित टैग सेट करना चाहता हूं। मुझे यह कैसे करना चाहिए? धन्यवाद – yas375

0

मैं बस का कहना है कि आप से अपने हाल ही में बनाए शाखा पर rebase नहीं करना चाहिए चाहता था सामान जो आपके पास पहले से ही एक अलग गिट शाखा में है। इसके बाद git svn dcommit तब लगता है कि यह ट्रंक को धक्का देता है। कम से कम यह मेरे लिए एक समस्या थी।

इसके बजाय, यदि आप पुरानी गिट शाखा से इस नई svn शाखा में परिवर्तन खींचना चाहते हैं, तो उदाहरण का उपयोग करें। चुनना।

+0

मैंने अभी यह कोशिश की है (old_branch को new_svn_branch में मिलाएं, फिर dcommit) और यह सही एसवीएन शाखा (ट्रंक नहीं) के लिए प्रतिबद्ध है। Msysgit 1.7.9 का उपयोग करना। – florisla

+0

मेरा मतलब था कि यदि आपके पास गिट में शाखा 1 और शाखा 2 है, तो svn में नई शाखा 1 बनाना चाहते हैं, और उसके बाद शाखा 2 से गिट शाखा 1 में वापसी करना चाहते हैं। इसके बाद डॉकिटिंग ट्रंक पर जाएगी (मेरे लिए किया गया)। हो सकता है कि @ पेस्ट्रेला के सुझाव के साथ यह कोई समस्या नहीं है। और किसी भी मामले में यह एक मामूली है। – yngve

48

आप अपने स्थानीय शाखा से पहले बनाए गए तोड़फोड़ शाखा अस्तित्व में है और अब आप एक तोड़फोड़ शाखा में अपनी स्थानीय शाखा पुश करने के लिए, आप निम्न कर सकते चाहते हैं:

संशोधन आपके द्वारा बनाए गए से SVN शाखा अपना स्थानीय शाखा

 
    $ svn cp http://svn-repo/my_app/[email protected] http://svn-repo/my_app/branches/feature1 

नया SVN शाखा लायें ताकि अपना Git रेपो के बारे में यह

 
    $ git svn fetch 

SVN शाखा चाहिए अब जानता है अपने गिट रेपो

 
    $ git branch -a 
    * feature1 
     master 
     remotes/feature1 

इस बिंदु पर आपका रिमोट अभी भी ट्रंक होगा। आपको अपनी स्थानीय शाखा को नई रिमोट शाखा में इंगित करने की आवश्यकता है। आप दूरस्थ शाखा से अपने स्थानीय शाखा रिबेसिंग करके ऐसा कर सकते:

 
    $ git rebase remotes/feature1 

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

 
    $ git svn dcommit --dry-run 
    Commiting to http://svn-repo/my_app/branches/feature1 

अब आप अपने दूरस्थ शाखा में परिवर्तन प्रतिबद्ध हो सकता है

 
    $ git svn dcommit 

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

+1

बढ़िया! ठीक ठीक! –

+2

@unpluggd: मुझे लगता है कि यह स्वीकार्य उत्तर होना चाहिए क्योंकि यह वास्तव में पूछे गए प्रश्न का उत्तर देता है। यही है, जब तक स्वीकार्य उत्तर मानता है कि उन आदेशों को टाइप करने से पहले एक स्थानीय शाखा बनाई गई है और हैक किया गया है। –

+0

'git svn fetch' – SnapDragon

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