2009-04-17 19 views
9

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

मुझे पता है कि यह एक डुप्लिकेट की तरह लगता है, लेकिन निराशा मुझे फिर से पूछ रही है, इस बारे में कुछ विशिष्ट विवरण के साथ कि मैं इस बारे में कैसे जा रहा हूं ताकि उम्मीद है कि कोई मुझे बता सकता है कि मेरी प्रक्रिया खराब हो गई है।

मेरे सेटअप:

मैं एक दूरस्थ शाखा (SVN/ट्रंक), एक स्थानीय शाखा (ट्रंक) और एक अन्य स्थानीय शाखा है कि मैं आम तौर पर में (कार्य-ट्रंक) काम करते हैं। ट्रंक को svn/trunk से चेक आउट किया गया था और ट्रंक से कार्य-ट्रंक की जांच की गई थी।

  1. मेरी ट्रंक पर, git svn rebase (रिटर्न संघर्ष)
  2. git mergetool
  3. सहेजें विलय फ़ाइल से [उस फ़ाइल के लिए संघर्ष को सुलझाने]:

    यहाँ मैं क्या कर रहा हूँ है मिलाया और बंद मिलाया।

  4. git add .
  5. git rebase --continue
  6. [कुल्ला, दोहराने]
  7. अगर मैं एक संदेश पूछा था कि क्या मैं git add इस्तेमाल किया, मिल रहा git rebase --skip

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

स्पष्ट रूप से एक महत्वपूर्ण टुकड़ा है जो मैं यहां लापता हूं, लेकिन मुझे बस यह नहीं दिख रहा है और इससे कई समस्याएं और निराशा होती है। गिट में विलय आसान हो सकता है, लेकिन मुझे यकीन है कि यह मामला नहीं है।

धन्यवाद।

अद्यतन: बस समस्या के भाग (या सभी) के मामले में मेरे वर्कफ़्लो का वर्णन करने के लिए एक त्वरित अद्यतन फेंकना चाहता था।

svn/ उपसर्ग के साथ मेरे भंडार को क्लोन करने के बाद, मेरे पास svn/trunk दूरस्थ शाखा है। यह देखते हुए कि:

  1. I git co -b trunk svn/trunk एक स्थानीय शाखा में मेरा रिमोट देखने के लिए।
  2. I git co -b working-trunk एक कार्यशील शाखा बनाने के लिए जिसका उपयोग मैं अलग-अलग डिग्री बनाने के लिए करता हूं ताकि मेरा स्थानीय ट्रंक हमेशा मेरे रिमोट ट्रंक को दर्पण कर सके।
  3. मैं डिफ़ॉल्ट मास्टर शाखा को हटाता हूं (svn के साथ काम करते समय, मुझे "मास्टर" के बजाय "ट्रंक" के संदर्भ में सोचना आसान लगता है)।

एक बार मैं अपने शाखाओं के सभी है, मेरी ठेठ कार्यप्रवाह इस तरह दिखता है:

  1. पर काम ट्रंक, मैं अपने परिवर्तन करें और उन्हें करते हैं।
  2. I git co trunk और git svn rebase करें।
  3. नया कोड मान लिया गया था, मैं git rebase working-trunk
  4. git co working-trunk
  5. git merge trunk
  6. git rebase trunk
  7. git co trunk
  8. git merge working-trunk
  9. git svn dcommit

यह कदम की एक बहुत कुछ है, मुझे पता है, लेकिन है कि क्या यहां हर किसी को और दूसरी जगहों की सिफारिश की है है। क्या मेरी घातक दोष उस प्रक्रिया में कहीं कहीं हो सकती है?

फिर से धन्यवाद।

+1

क्या आपने जवाब दिया उठाया (जिस्टिन) समस्या हल? – inger

उत्तर

5

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

देखें: http://learn.github.com/p/git-svn.html थोड़ी अधिक जानकारी और दिशानिर्देशों के लिए।

1

मैंने इसे (एन स्वीकार्य रूप से छोटा) संघर्ष के साथ करने की कोशिश की, और git svn dcommit के बाद मुझे कोई और संघर्ष नहीं हुआ। एक अंतर यह है कि मुझे git add के बारे में कोई संदेश नहीं मिला। क्या यह संभव है कि आपकी टीम सिर्फ आपके काम के साथ संघर्ष करने वाली कई प्रतिबद्धताओं में भेज रही हो? यह असंभव लगता है, लेकिन यह सबसे सरल व्याख्या प्रतीत होता है।

यह अपने समय एक अलग स्थान में फिर से रेपो हो और परीक्षण तुम वहाँ dcommit मंच है कि किसी भी तरह छुपाई जा रही दौरान एक संचार समस्या नहीं है सुनिश्चित करने के लिए परिवर्तन nonconflicting धक्का कर सकते हैं कि करने के लिए लायक हो सकता है।

अद्यतन: एक अन्य विचार मैंने किया था: मैंने git add foo.bar किया था जब मैंने संघर्ष को हल करना समाप्त कर दिया था। क्या यह संभव है कि git add . कुछ अप्रत्याशित कर रहा है? मैं वास्तव में git svn की क्षमताओं को बहुत अधिक नहीं खींचता, इसलिए ये बहुत अधिक WAGs हैं।

+0

यह भी हो सकता है कि मैं अपने भंडार को कैसे संभालने के साथ बहुत मैला हूं, लेकिन मुझे यकीन नहीं है कि यह कैसे/क्यों होगा। मैंने कई बार इसमें भाग लिया है और हर बार अपने रिपो को पूरी तरह से मारने और पुनर्निर्माण समाप्त कर दिया है। बेहद निराशाजनक। आपके विचारों के लिए धन्यवाद। –

1

ऐसा लगता है कि ऐसा कुछ ऐसा नहीं कर रहा है जिस तरह से आप सोचते हैं। यदि हांक गे ने सुझाव दिया कि यह असंभव चीजें नहीं हैं, तो यह कुछ और असंभव चीज है।

मेरी संभावना नहीं है कि आपकी शाखा संरचना वह नहीं है जो आपको लगता है या आप उस शाखा पर पुनर्जीवित नहीं कर रहे हैं जो आपको लगता है कि आप हैं। तो मैं सुझाव है कि आप:

  1. git branch सिर्फ पुष्टि करने के लिए अपनी शाखा संरचना आप क्या उम्मीद

  2. जोड़े
    export PS1='\e[0;31m\n\w$(__git_ps1 "(%s)") $ \e[m'
    को ~/है।bash_profile और फिर से प्रवेश,
    शाखा (और किसी भी प्रक्रिया में Git आदेश) अपने प्रॉम्प्ट में दिखाने के लिए:

    /कार्यक्षेत्र/wikka (featurebranch1 | रिबेस-मैं) $

दे देंगे कि आप अधिक प्रतिक्रिया (और शायद इस डब्ल्यूएजी को एक संभावना के रूप में खत्म करें)।

0

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

[SVN]---git-svn---[trunk]---branch---[mytrunk] 

मर्ज करने के लिए, स्विच और करना एक:

git svn rebase 

यह रिमोट से परिवर्तन में खींचती है और ट्रंक के साथ विलीन हो जाती है । फिर, mytrunk पर स्विच और एक कार्य करें:

git rebase 

यह ट्रंक से परिवर्तन खींचती है और mytrunk के साथ विलीन हो जाती है। मुझे लगता है कि यह काम करना चाहिए। अन्यथा, स्थानीय ट्रंक को गिट-क्लोन करें और इसके बजाय क्लोन पर काम करें।

+0

ऐसा लगता है कि मैं क्या करता हूं, अगर मैं आपको सही ढंग से समझता हूं। मैं अपने वर्कफ़्लो के साथ अपना मूल प्रश्न अपडेट करूंगा। –

0

मुझे अनुशंसित वर्कफ़्लो का उपयोग करते समय अभी इस समस्या का सामना करना पड़ा है, इसलिए मुझे लगता है कि हमें यहां एक जवाब की कमी है।

यहां बताया गया है कि मैं इस स्थिति में कैसे आया।

अपाचे इंफ्रास्ट्रक्चर का उपयोग करते हुए मेरे पास गिट svn के माध्यम से एक गिट रेपो है।

मेरे पास एक स्थानीय शाखा है।

1) ट्रंक rebase:

मैं इस प्रक्रिया का पालन करने के लिए प्रयास करें। 2) निजी शाखा में ट्रंक मर्ज करें। 3) काम करें। 4) ट्रंक रिबेस करें। 5) ट्रंक में निजी विलय करें। 6) डॉकिट।

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

1

एक SubGit 'मिल सकता है रों थोड़ा आसान दृष्टिकोण:

  1. सववर्सन रिपॉजिटरी में SubGit स्थापित सर्वर साइड पर
  2. उपयोग git नहीं git-svn SVN भंडार में परिवर्तन भेजने के लिए *

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

अधिक जानकारी के लिए कृपया SubGit documentation और git-svn comparison देखें।

* किसी भी गिट क्लाइंट के साथ काम करता है।

3

मैं एक ही समस्या (जीआईटी svn rebase जो संघर्ष देता है) में समाप्त हो गया। मुझे अपने वर्कफ़्लो में समस्या मिली। यहाँ कार्यप्रवाह मैं है/आप का पालन करना चाहिए:

git svn rebase # put all the new commits on top 

git svn dcommit # push the new commits to svn (will rewrite each commit message to add the svn tag) 

git pull # merge the conflicts due to the commit messages 

git push # push the synchronized version to the remote git server 

जब भी मैं dcommit के बाद इतिहास विलय करने के लिए भूल गया, मैं नए (फर्जी) संघर्ष दिखाई है कि अगर मैं नई प्रतिबद्ध करते हैं। उन्हें हल करने के लिए, आप या तो ऊपर वर्णित दृष्टिकोण का पालन कर सकते हैं या यदि यह मेरे जैसा सटीक समस्या है, तो आप इसका उपयोग करके स्वचालित तरीके से भी कर सकते हैं:

git svn rebase --strategy ours 
+0

वास्तव में, मैंने रणनीति 'हमारी' के साथ कुछ समस्याएं अनुभव की। ऐसा लगता है कि नए कामों को नजरअंदाज कर दिया गया है। अब, जब तक यह शिकायत बंद नहीं करता है, तब तक मैं बस 'गिट रिबेस --स्किप' चलाता हूं। – user1448926

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