2012-05-15 22 views
14

मैं एक ऐसी परियोजना पर काम कर रहा हूं जो उनके भंडार के लिए उपversण का उपयोग करता है। क्योंकि मुझे कुछ बदलाव करने की आवश्यकता है जिसे अभी तक svn सर्वर पर नहीं भेजा जा सकता है, मैंने git svn का उपयोग शुरू किया ताकि मैं स्थानीय चेकइन कर सकूं। मेरा सेटअप इस तरह दिखता है:`गीट svn rebase` बनाम 'गीट रीबेज ट्रंक'

शाखाएं: ट्रंक (एसवीएन ट्रंक ट्रैकिंग), मास्टर (svn में क्या है के करीब है), और विषय।

*------------------ trunk 
\ 
    *-----------*--------- master 
       \ 
       *-------- topic 

कार्यप्रवाह:

[on branch master] 
$ git svn fetch 
$ git svn rebase 
$ git checkout -b topic 
$ git rebase master 
[hack hack hack] 
$ git commit -a 
[once upstream is ready for my changes] 
$ git svn fetch 
$ git checkout master 
$ git svn rebase 
$ git checkout topic 
$ git rebase master 
$ git svn dcommit 
$ git checkout master 
$ git svn rebase 
$ git branch -d topic 

यह मानकर कि कोई भी git svn fetch और git svn rebase के बीच svn के लिए प्रतिबद्ध, मास्टर मूल रूप से मास्टर पर git rebase trunk रन के रूप में ही पर git svn rebase रन है?

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

उत्तर

16

ध्यान दें, git svn से, "Why is the meaning of “ours” and “theirs” reversed with git-svn" में दिए गए विवरण के रूप में:

git svn rebase 

यह वर्तमान प्रधान के SVN माता पिता से संशोधन को हासिल करेगा और वर्तमान (SVN को अप्रतिबद्ध) rebases इसके खिलाफ काम करते हैं।

तो तुम जरूरत नहीं है git svn fetch से पहले अपने git checkout master और git svn rebase, खासकर यदि आप केवल trunk (master की मूल) पर नज़र रखने के।


दूसरा बिंदु, git svn dcommit प्रत्येक नए के लिए SVN में संशोधन बनाना होगा master पर प्रतिबद्ध है, लेकिन अपने कार्यप्रवाह प्रदर्शित नहीं करता है किसी भी नए, master पर प्रतिबद्ध केवल topic पर (जो कभी master पर विलय नहीं किया जाता)


OP Sean McMillan टिप्पणियां:

डॉक्स, git svn dcommit एक branc बिना के अनुसार एच निर्दिष्ट वर्तमान सिर पर काम करता है, न केवल master पर। तो मैं अपनी शाखा से एसवीएन को प्रतिबद्ध करता हूं, फिर पर master पर एसवीएन से वापस लाने के लिए भरोसा करता हूं। dcommited के बाद मैंने topic शाखा छोड़ दी। क्या यह कोशेर नहीं है?

वह विवरण है कि:

मैं उन्हें SVN के लिए भेजा नहीं कर सकते ... अभी तक। अपस्ट्रीम एक रिलीज के लिए ट्रंक को "फ्रीज" करना चाहता है, इस बीच, मैं अगली रिलीज के लिए कार्यक्षमता पर काम कर रहा हूं।

लेकिन अंतिम सवाल है, "Git ट्रंक गुरु ही rebase के रूप में Git SVN मास्टर शाखा पर rebase है?" अगर ऐसा है, तो मैं लगातार मेरी शाखाओं को बदलने होने के लिए, बस rebase की जरूरत नहीं है एसवीएन के खिलाफ मेरी मास्टर शाखा। लेकिन अगर ऐसा नहीं है, और जब मैं svn rebase गिट करता हूं, तो मैं कुछ जानना चाहता हूं, मैं जानना चाहता हूं।

जो मैं जवाब देने के लिए:

एक git svn fetch एक git rebase trunk master के बाद एक git svn rebase के बराबर होगा।

+0

पहले पर: इसलिए मुझे 'svn rebase' git से पहले 'svn fetch' git करने की आवश्यकता नहीं है ... जब तक मैं 'मास्टर' पर हूं। लेकिन अगर मैं 'विषय' पर हूं, तो 'git svn fetch' 'ट्रंक' अपडेट करेगा, लेकिन अकेले 'मास्टर' और 'विषय' छोड़ दें। हालांकि, मैंने कभी भी अपनी विषय शाखा 'svn rebase' को गिट नहीं किया, हालांकि, मैं केवल 'गिट रीबेज' करता हूं। जानना दिलचस्प है। –

+0

@ सेनएमसीमिलन "जब तक मैं मास्टर पर हूं": हाँ, यह विचार है। और आप प्रत्येक बार 'गिट चेकआउट मास्टर' करते हैं, इसलिए ... – VonC

+0

दूसरे पर: दस्तावेज़ों के अनुसार, निर्दिष्ट शाखा के बिना 'गीट svn dcommit' निर्दिष्ट सिर पर काम करता है, न केवल' मास्टर 'पर। इसलिए मैं अपनी शाखा * से एसवीएन * को प्रतिबद्ध करता हूं, फिर एसवीएन से वापस आने के लिए 'मास्टर' पर 'गीट एसवीएन रीबेस' पर भरोसा करता हूं। मैंने डॉक्यूमेंट किए जाने के बाद 'विषय' शाखा छोड़ दी। क्या यह कोशेर नहीं है? –

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