2009-04-15 9 views
18

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

यहाँ समय रेखा है:

  • शाखा बंद ट्रंक शाखा dev1 बनाने के लिए।
  • dev1 में कोड, फ़ाइलों को संशोधित करना और फ़ाइलों को जोड़ना।
  • शाखा dev2 बनाने के लिए ट्रंक से शाखा।
  • dev1 में बग फिक्स, फ़ाइलों को संशोधित करना, लेकिन फाइलें नहीं जोड़ना।
  • dev1 में dev1 पर सभी परिवर्तनों को मर्ज करें।

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

संपादित करें: सभी कोड सबवर्सन में पूरी तरह प्रतिबद्ध हैं। लेकिन मुझे लगता है कि क्या हो रहा है यह है कि फाइल जोड़ विलय के माध्यम से प्रचार नहीं करते हैं। यही है, एक पूर्व विलय से dev1 ने कुछ फाइलें जोड़ दीं, लेकिन dev1 से विलय में शामिल फ़ाइलों को शामिल नहीं किया गया है।

लेकिन मैं अभी भी जांच कर रहा हूं।

उत्तर

27

निम्न कथन सच नहीं है: कि एक शाखा में जोड़ा गया था और उसके बाद शाखा पर बदल नहीं

फ़ाइलें संशोधनों की संख्या में विलय करते समय

इसका अर्थ यह होगा कि विलय विलय पूरी तरह टूटा हुआ है।

जब आप विलय करते हैं, तो आपको यह सुनिश्चित करना होगा कि आप फ़ाइल बनाने वाले संशोधन को मर्ज करें, अन्यथा आपको उन चेतावनियों को कोई लक्ष्य नहीं मिलेगा।

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

एक खाली फ़ाइल जोड़ने के बारे में टिप्पणी नहीं की जानी चाहिए, क्योंकि तब नई फ़ाइल का कोई इतिहास नहीं है, जहां से यह आया था। दूसरे शब्दों में, यह एक प्रति नहीं है, इसलिए "svn log" इसका इतिहास नहीं दिखाएगा। और अंत में, अगर फ़ाइल एक गीगाबाइट फोटो थी, तो आप इसे एक नई फ़ाइल में विलय नहीं करना चाहेंगे, क्योंकि तब भंडार में समान संदर्भ के दो प्रतियां होंगी। इतिहास के साथ विलय और प्रतिलिपि भंडार भंडारण बचाती है (कम से कम जब तक प्रति शेयर साझा नहीं किया जाता है)।

+0

यह समझ में आता है। मुझे लगता है कि मुझे कुछ मुश्किल विलय मिल गया है ... :-( – staticsan

+4

इस पर इंगित करने के लिए +1 "एसवीएन रिवर्ट" विलय तोड़ देगा, यह मेरी समस्या थी। –

1

फ़ाइलों को जो शाखा में जोड़ा गया था और फिर शाखा में बदल दिया गया है, कई संशोधनों में विलय करते समय जोड़ा नहीं जाता है क्योंकि उपवर्तन एक फ़ाइल को संदर्भ में लागू करने की कोशिश कर रहा है जो उसमें मौजूद नहीं है कामकाजी निर्देशिका (नई फाइल)। आपको svn से कुछ चेतावनी दिखाई देगी जैसे "गायब फ़ाइल blah.c छोड़ना ..."

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

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

+1

मुझे "खाली फाइलें पहले" चाल पसंद है। फिर यह सिर्फ एक "डेल्टा मांस" के साथ एक डेल्टा है। ठंडा। – Roboprog

27

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

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

+4

यह दस्तावेज करने के लिए धन्यवाद। यह मेरी सही समस्या थी –

+3

यह भी मेरी सही समस्या थी।यह बहुत अच्छा होगा अगर svn ने कहा, "अरे ये फ़ाइलें पहले से ही आपके डब्ल्यूसी में मौजूद हैं", बस इसे स्पष्टीकरण के बिना छोड़कर –

+2

+1 यह ठीक है कि मेरे साथ क्या हुआ (पेड़ संघर्ष, फाइलों को छोड़ दिया गया था, फाइलें नहीं जोड़े गए थे - -> फिर पेड़ संघर्ष) – fmuecke

0

(चूंकि इस समस्या की खोज करते समय यह शीर्ष पोस्ट प्रतीत होता है, इसलिए मैं उसी व्यवहार के किसी अन्य संभावित कारण पर टिप्पणी करूंगा)।

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

इस मामले में, आपको केवल यह सत्यापित करना चाहिए कि फ़ाइलों को वास्तव में सही ढंग से विलय किया गया है और सामान्य रूप से जारी है।

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