2010-04-22 20 views
6

मैं svn का उपयोग कर रहा हूं। मेरे पास दो शाखाएं हैं और दोनों में बहुत सारे बदलाव किए गए हैं। शाखाओं में से एक के अलावा कई फाइलों का नाम बदल दिया गया था, इसलिए अब svn उन फ़ाइलों में परिवर्तनों को मर्ज करने में मदद नहीं कर सकता (अच्छी तरह से svn सीमा पता है)।git-svn विलय 2 svn शाखा

  1. क्या शाखाओं के विलय को करने के लिए गिट-एसवीएन का उपयोग करना संभव है?
  2. क्या गीट-एसवीएन नामित फ़ाइलों को भी संभाल लेंगे?

धन्यवाद

+0

यह उत्तर देखें: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702 # 3585702 –

+0

देखें http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ... "संपादित करें:" भाग दूसरे उत्तर (स्वीकार किए गए उत्तर नहीं) विशेष रूप से अच्छा –

उत्तर

7

git merge (एक निश्चित बिंदु तक) का पता लगाने के लिए सक्षम होना चाहिए नाम बदलता है।

recursive

यह केवल एक 3-रास्ता मर्ज कलन विधि का उपयोग दो सिर को हल कर सकते हैं।
इसके अतिरिक्त यह नामों से जुड़े विलयों का पता लगा सकता है और संभाल सकता है।
यह एक शाखा खींच या विलय करते समय डिफ़ॉल्ट विलय रणनीति है।

लेकिन git-svn केवल एसवीएन से आयात/निर्यात कर सकता है, विलय नहीं कर सकता है।
और मर्ज मुश्किल है:

चेतावनियां

सरलता के लिए और एक कम सक्षम प्रणाली (SVN) के साथ अंतरसंक्रियता, यह अनुशंसित है कि सभी git svn उपयोगकर्ताओं क्लोन, लाने और dcommit सीधे एसवीएन सर्वर से, और गिट रिपॉजिटरीज और शाखाओं के बीच सभी गिट क्लोन/पुल/मर्ज/पुश ऑपरेशंस से बचें।
गिट शाखाओं और उपयोगकर्ताओं के बीच कोड का आदान-प्रदान करने की अनुशंसित विधि गिट प्रारूप-पैच और गिट एम है, या सिर्फ एसवीएन भंडार के लिए 'कमजोर' है।

रनिंग गिट मर्ज या गिट पुल को उस शाखा पर अनुशंसित नहीं किया जाता है जिसकी आप योजना बनाते हैं। सबवर्सन किसी भी उचित या उपयोगी फैशन में विलय का प्रतिनिधित्व नहीं करता है; इसलिए सबवर्सन का उपयोग करने वाले उपयोगकर्ता आपके द्वारा किए गए किसी भी विलय को नहीं देख सकते हैं। इसके अलावा, यदि आप एक गिट शाखा से विलय या खींचते हैं जो एसवीएन शाखा का दर्पण है, तो डॉकिट गलत शाखा में प्रतिबद्ध हो सकता है। Git SVN dcommit SVN के शीर्ष पर प्रतिबद्ध करने के लिए हो सकता है कि यह सुनिश्चित करना चाहिए कि सबसे हाल ही में प्रतिबद्ध प्रतिबद्ध

git log --grep=^git-svn-id: --first-parent -1 

में नाम का प्रयास करेंगे:

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

1

मुझे कॉलेज में एक परियोजना में एक ही समस्या थी।

  • एक नया Git-SVN भंडार बनाने (git svn clone -s https://…)
  • शाखाओं Git (git checkout master; git merge branch)
  • चेकआउट के साथ ट्रंक SVN के साथ विलय (svn co https://…/trunk)
  • प्रति ओवर: क्या मैंने किया था निम्नलिखित Git से मर्ज किए गए फ़ाइलों
  • SVN के साथ बाएं से अधिक फ़ाइलों और निर्देशिकाओं को हटाना (svn rm)
  • SVN के साथ प्रतिबद्ध (svn ci)
  • लाने Git में नए प्रतिबद्ध
+0

उपयोगी सारांश के लिए धन्यवाद। क्या गिट मर्ज आसान था, svn द्वारा इसे करने में कोई आसान? (मुझे इसका उत्तर खोजने का प्रयास कर रहा है: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger

+0

एक और बात , क्या आप वापस svn करने के लिए dcommit करने की कोशिश की? यदि हां, तो आप क्या समस्याएं प्राप्त कर रहे थे/उम्मीद कर रहे थे? – inger

+0

@inger, मैंने यह सुनिश्चित करने के लिए svn के साथ प्रतिबद्ध नहीं किया है कि मैं आधा बेक्ड विलय को धक्का नहीं दे रहा हूं जो केवल गिट समझ जाएगा। – knittl

0

SVN उपयोग कार्यक्षमताओं विलय SVN शाखाओं मर्ज करने के लिए, इसे और अधिक तेजी से हो जाएगा। इन मुद्दों के लिए गिट का उपयोग करना काफी जटिल है, यह बहुत अधिक conflits बनाता है ...

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