2012-08-01 10 views
6

मैंने अपना ट्रंक ब्रांच किया है (पिछले संशोधन में) और एक नई सुविधा लागू/लागू की है और शाखा में स्थानीय रूप से किसी अन्य सुविधा का हिस्सा लागू किया है। अब मुझे ट्रंक में तैयार सुविधा को फिर से भरना होगा।PREV, BASE, या COMMITTED संशोधन कीवर्ड किसी शाखा को पुनर्निर्मित करते समय यूआरएल के लिए अमान्य हैं

I svn cp branches/completedfeature branches/uncompletedfeature अपनी शाखा में आंशिक रूप से पूर्ण सुविधा प्राप्त करने के लिए। मैं फिर पहली शाखा में svn revert -R . सब कुछ तो यह अद्यतित है।

PREV, BASE, or COMMITTED revision keywords are invalid for URL while reintegrating a branch 

दोनों ट्रंक और पूरा सुविधा शाखा कोई स्थानीय परिवर्तन के साथ तारीख तक कर रहे हैं:

अब जब मैं svn merge --reintegrate ../../branches/completedfeature ट्रंक से, मैं इस गुप्त (मेरे लिए) त्रुटि मिलती है। क्या चल रहा है?

उत्तर

1

ऐसा लगता है कि मैंने इसे खराब/गलत ब्रांच किया था। मुझे यह पता नहीं लगा है कि इसे सही तरीके से कैसे ठीक किया जाए, इस स्थिति में मौजूद किसी भी व्यक्ति के लिए यह है कि इस अल्पकालिक शाखा के अधिकांश इतिहास को संरक्षित करने वाले ट्रंक में मेरे परिवर्तन कैसे प्राप्त हुए:

सभी खोजें आपकी फाइलें जो diff -ur trunk branch बदल गईं। सुनिश्चित करें कि आप diff के माध्यम से देखते हैं क्योंकि शाखा में नहीं होने वाले ट्रंक में किए गए किसी भी बदलाव को वापस लाया जाएगा, इसलिए उन फ़ाइलों को अनदेखा करें या यदि दोनों पेड़ में फ़ाइल में परिवर्तन हैं तो मैन्युअल रूप से बाद में diff को संपादित करना सुनिश्चित करें।

कॉपी SVN के साथ कोई भी नई फ़ाइलें अपने इतिहास svn cp branch/path/file trunk/path/file

संरक्षित करने के लिए अब आप बस फ़ाइलों को परिवर्तित नहीं किया है में परिवर्तन की जरूरत है। आप दो स्रोत मर्ज नहीं कर सकते क्योंकि (कम से कम svn 1.7 में सिगविन में) यह हटा देगा और फिर फ़ाइल को जोड़ देगा, इतिहास को मिटा देगा। मैंने जो विकल्प चुना वह एक पैच बनाने/लागू करना था और जो हुआ उसके बारे में एक प्रतिबद्ध संदेश बनाना था।

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

diff -u trunk/path/file branch/path/file >> patch.patch के साथ अपना पैच बनाएं प्रत्येक फ़ाइल के लिए ऐसा करें, या फिर रिकर्सिव फ्लैग में पास करें और कड़ी मेहनत करें।

यकीन है कि पैच काम करता है बनाने के लिए एक सूखी रन करो और सही फ़ाइलें patch -p0 --dry-run < patch.patch तो यह patch -p0 < patch.patch

तो यकीन है कि परियोजना बनाता है बनाने के पैच और में यह जाँच समझौता हो जाता है।

इस सवाल में खुला छोड़कर उम्मीद है कि कोई असली जवाब जानता है।

6

मुझे यह त्रुटि थी।

आपका प्रश्न लगभग एकमात्र Google परिणाम (here is a description of the keywords) था।

मेरे पास एक लंबी शाखा थी जिसमें अन्य शाखाएं विलय हो गईं ... पैच प्रक्रिया लंबी और कठिन हो रही थी। तो This section of the SVN redbood के बावजूद यह सुझाव देता है कि आपको दो कार्यशील प्रतियों को मर्ज करना चाहिए, मैंने आशावादी रूप से यूआरएल से फिर से प्रयास करने की कोशिश की और यह काम किया!

cd myLocalTrunk 
svn merge --reintegrate https://svn.blah.blah/blah/blah/branches/myBranch 
svn ci -m "reintegrating myBranch into trunk" 
0

सामान्य तौर पर यहां पैच-फ़ाइलों का उपयोग करने के लिए कोई जरूरत नहीं है - किसी भी "-c एक्स" या "-r x: y" रेंज वास्तव में एक changeset, यानि कि पैच का एक प्रकार है कि लागू किया जा सकता है। आइए एक पूर्ण उदाहरण बनाएं, इसलिए शुरुआत में

svn copy trunk/path/file branch/path/file 

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

svn info trunk/path/file 
# 35 

svn info branch/path/file 
# 27 

के लिए दोनों फ़ाइलों को पूछ सकते हैं, इस श्रृंखला का उपयोग करने के लिए है, अब आप कह सकते हैं

svn merge -r 27:35 trunk/path/file branch/path/file 

आप इस बारे में सोच सकते हैं जैसे यह लक्ष्य पर लागू होने के लिए 27:35 सीमा के लिए आंतरिक रूप से पैच फ़ाइल बना रहा है। जब तक यह केवल फ़ाइल-टू-फाइल है, तब तक आप पेड़-संघर्ष भी नहीं प्राप्त कर सकते हैं (निर्देशिका विलय में नामित फ़ाइलों के बारे में सोचें)।