2008-10-09 17 views
25

मैं निम्नलिखित समस्या तोड़फोड़ का उपयोग कर:सबवर्जन नामित फ़ाइलों में परिवर्तन विलय नहीं कर रहा है?

मैं वर्तमान में अपने प्रोजेक्ट के ट्रंक पर काम कर रहा हूँ और कुछ पुनर्रचना करने के लिए (जो फ़ाइलों का नाम बदलने या अलग निर्देशिका के लिए फ़ाइलों को ले भी शामिल है) की योजना है।

उसी समय कोई अन्य शाखा पर एक ही परियोजना पर काम कर रहा है।

कुछ समय में मैं शाखा में किए गए परिवर्तनों को ट्रंक में विलय करना चाहता हूं। इसमें फाइलों (शाखा पर) में किए गए परिवर्तन शामिल हैं जिनका नाम ट्रंक पर रखा गया है।

मैंने कुछ परीक्षण किए और ऐसा लगता है कि या तो उपversण इन परिवर्तनों का पालन करने में सक्षम नहीं है या मुझे कुछ याद आ रहा है (जो मुझे उम्मीद है)। मैं इस परीक्षण किया निम्न स्क्रिप्ट का उपयोग कर (बैश में काम करना चाहिए, "http://myserver/svn/sandbox" पर एक SVN भंडार मान लिया गया):

svn co http://myserver/svn/sandbox 

cd sandbox/ 

mkdir -p MyProject/trunk MyProject/branches MyProject/tags 

cat - <<EOF >MyProject/trunk/FileOne.txt 
Test 
1 
2 
EOF 

svn add MyProject 

svn commit -m "init" 

# create a branch 
svn copy http://myserver/svn/sandbox/MyProject/trunk http://myserver/svn/sandbox/MyProject/branches/Branch_1 svn copy http://myserver/svn/sandbox/MyProject/trunk http://myserver/svn/sandbox/MyProject/branches/Branch_1 

# rename the file 
svn move MyProject/trunk/FileOne.txt MyProject/trunk/FileTwo.txt 

svn commit -m "renamed file" 

svn update 

# change the content of FileOne in branch 

cat - <<EOF >MyProject/branches/Branch_1/FileOne.txt 
Test 
2 
3 
EOF 

svn commit -m "changed branch" 

# I now try to merge the changes in FileOne back to FileTwo 
cd MyProject/trunk/ 
svn merge -r1:HEAD http://myserver/svn/sandbox/MyProject/branches/Branch_1 
# but this yields the following message: 
# Skipped missing target: 'FileOne.txt' 

किसी भी मदद की बहुत सराहना कर रहा है।

संपादित करें: शायद प्रक्रिया mikegrb ने सुझाव दिया कुछ हद तक से पहले ट्रंक पर SVN लॉग आदेश से नाम बदली गई फ़ाइलें (old-> नया) का एक नक्शा उत्पन्न करके स्वचालित सकता है:

svn log -v 
------------------------------------------------------------------------ 
r33 | sme | 2008-10-09 15:17:54 +0200 (Do, 09 Okt 2008) | 1 line 
Changed paths: 
    D /MyProject/trunk/FileOne.txt 
    A /MyProject/trunk/FileTwo.txt (from /MyProject/trunk/FileOne.txt:31) 


resulting map: {FileOne.txt => FileTwo.txt} 

अब इस का उपयोग शाखा पर जेनरेट की गई पैच फ़ाइल में फ़ाइल नाम बदलने के लिए मानचित्र।

मूल:

Index: FileOne.txt 
=================================================================== 
--- FileOne.txt (.../trunk)  (revision 31) 
+++ FileOne.txt (.../branches/Branch_1) (revision 34) 
@@ -1,3 +1,3 @@ 
Test 
-1 
2 
+3 

संशोधित:

Index: FileTwo.txt 
=================================================================== 
--- FileTwo.txt (.../trunk)  (revision 31) 
+++ FileTwo.txt (.../branches/Branch_1) (revision 34) 
@@ -1,3 +1,3 @@ 
Test 
-1 
2 
+3 

केवल एक विचार है, यह अभी तक नहीं किया है।

उत्तर

22

मुझे लगता है कि यह एक मौजूदा तोड़फोड़ bug है - लेकिन अपनी सांस, 2002 के बाद से

+2

ऐसा लगता है कि उन्होंने इस बग को संस्करण 1.8 पर धक्का दिया। 'अभी तक नहीं' कहने का एक और तरीका कौन सा है। चूंकि यह 2002 के बाद से खुला है क्योंकि यह 'कभी नहीं' की तरह अधिक से अधिक दिखने लगा है। –

+1

@deft_code क्या यह बग तय किया गया है? मुझे लगता है कि मैं अभी कुछ ऐसा अनुभव कर रहा हूं। मैंने टोर्टोइसेवन्स का नाम बदलकर दो फाइलों का नाम बदल दिया, और अब जब मैं ट्रंक से मेरी शाखा में विलय करने की कोशिश करता हूं (यह जांचने के लिए कि क्या यह ट्रंक में फिर से जुड़ने से पहले संकलित है) यह कहता है कि "गायब लक्ष्य छोड़ दिया गया है" – TravisG

+0

@TravisG - बग का संदर्भ है संभवतः 1.8 में तय किया जा सकता है, जो इस सप्ताह बाहर आ सकता है (एक गिट रिलीज था, संस्करण के बारे में सुनिश्चित नहीं है)। मैं अभी भी 1.7 पर हूं ... आप किस संस्करण पर हैं? –

1

ऐसा लगता है कि आपको उन्हें शाखा में पुनर्नामित करना होगा। क्या आप उस संशोधन को मर्ज कर सकते हैं जिसने उन्हें ट्रंक से शाखा में बदल दिया? यह कुछ समय बचा सकता है। अन्यथा, आपको उन्हें शाखा में पुनर्नामित करना होगा। फिर ट्रंक पर वापस विलय करने का प्रयास करें।

11

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

+4

तकनीकी रूप से गिट के पास असली नाम समर्थन नहीं है। हालांकि वे अनुमान लगाते हैं, जो तब एसवीएन बेहतर होता है। बाज़ार एकमात्र ओपन सोर्स वीसीएस है जो सच्चे नामों का समर्थन करता है। –

1

का संभावित हल शाखा के साथ ट्रंक समन्वयित करने से पहले ट्रंक के साथ शाखा सिंक करने के लिए है अपने खुले हुए पकड़ नहीं है।

अंतर यह है कि शाखा में ट्रंक में परिवर्तन (चाल) को लागू करने के लिए एक फ़ाइल होती है, जबकि शाखा में ट्रंक में परिवर्तन (संशोधित) लागू करने के लिए फ़ाइल नहीं होती है। यह केवल इसलिए है क्योंकि एसवीएन ट्रैक नहीं करता है कि फाइलें कहाँ स्थानांतरित/नामित की जाती हैं। मुझे नहीं पता कि यह क्यों नहीं करता है, उम्मीद है कि इसके लिए एक अच्छा कारण है।

उदाहरण:

  • रेव 1: /trunk/foo.txt /trunk/folder/foo.txt को
  • राजस्व 2 ले जाया गया: /branches/mybranch/foo.txt संशोधित किया गया है

ट्रंक में foo.txt परिवर्तनों को कैसे विलय करें?

समाधान:

  1. मर्ज ट्रंक से सभी संशोधन mybranch और प्रतिबद्ध करने के लिए। यह foo.txt को स्थानांतरित करने का कारण बन जाएगा।
  2. मेरी ब्रांच से ट्रंक में सभी संशोधन मर्ज करें। यह foo.txt की सामग्री को अपडेट करेगा, क्योंकि अब उनके पास एक ही रास्ता है।

नोट: यदि आपने ट्रंक और माइब्रैंच दोनों पर अलग-अलग फ़ाइलों को स्थानांतरित कर दिया है, तो आप सवारी में हैं। मुझे लगता है कि आपको चुनिंदा रूप से परिवर्तनों में विलय करना होगा ताकि आप दोनों दिशाओं में पहले स्थानांतरित/नाम बदल सकें, फिर परिवर्तनों को मर्ज करें।

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