2010-02-17 9 views
6

मुझे एक एसवीएन शाखा के साथ समस्या है। मैंने git checkout -t -b stable svn/stable के साथ इसका चेकआउट किया। फिर मैंने git rebase master के साथ विलय किया। उसके बाद मैं git svn dcommitगिट: रिबेस के बाद एसवीएन शाखा में कैसे प्रतिबद्ध होना है?

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

और git status के बजाय ट्रंक में परिवर्तन मुझसे कहता है:

# On branch stable 
# Your branch and 'svn/stable' have diverged, 
# and have 218 and 52 different commit(s) each, respectively. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
... 

किसी पता है कि मैं क्या गलत किया था और कैसे यह सही?

उत्तर

2

मैं हाल ही में एक ही गलती को हिट करने के लिए। बात यह है कि आप गुरु के rebase जब, यह पहली कड़ी मेहनत से रिज़र्वेशन है टीएस वर्तमान शाखा मास्टर करने के लिए और फिर लागू होता है इसे करने के लिए विलय किया जाता है। लेकिन आपकी मास्टर शाखा svn/trunk से जुड़ी है और इस प्रकार नई रीसेट शाखा इसके साथ भी जुड़ी हुई है। तो git-svndcommit पर लगता है कि जब आप उन्हें धक्का देते हैं तो svn/trunk में काम "डाला" जाता है।

समाधान git rebase के बजाय git merge --no-ff का उपयोग करना है। या सबवर्सन की विलय सुविधाओं का उपयोग करने के लिए।

+0

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

+0

@ टिगर्सी, मुझे संदेह है कि ऐसी ब्रांचिंग चाल आपको मदद करेगी। चूंकि 'svn/trunk' से जुड़ी प्रतिबद्धता वैसे भी आपकी शाखा में जाएगी। संशोधन इतिहास रखने के लिए, आप सबवर्जन के साथ विलय कर सकते हैं। अन्यथा, आप बस सबवर्सन लॉग को प्रदूषित करेंगे और अन्य डेवलपर्स इससे खुश नहीं होंगे। –

+0

मैं गिट करने के लिए नया हूं और मैं वास्तव में फायदे देखता हूं लेकिन इस गंभीर कदमों में यह कभी-कभी दैनिक चुनौतियों के लिए बहुत मुश्किल लगता है। क्या यह गिट स्विचरर्स दुनिया में एक डीवी गिट शाखा को एक स्थिर एसवीएन शाखा में विलय करने के लिए एक आम परिदृश्य नहीं है, जिसके लिए ऐसा करने का एक आम तरीका मौजूद है? – ownking

0

अब यह काम करता है, मैं इसे इस तरह से किया था:

git checkout master 
    git svn rebase 
    git checkout --track -b svn_stable svn/stable 
    git merge --squash master 
    git commit -m "Bring stable up-to-date with trunk" 
    git svn dcommit --dry-run 
    git svn dcommit 

मर्ज बहुत आसान संघर्ष से निपटने के साथ rebase से किया गया था।

इस प्रयास में मैं --no-ff का उपयोग करना भूल गया, यह प्रत्येक विलय के लिए प्रतिबद्ध है, है ना?

आपकी मदद :)

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