जब आप किसी व्यक्तिगत संघर्ष पर समाधान करते हैं, तो सारांश संदेश क्या कहता है? यदि आप वर्तमान से विलय करते हैं -> प्रायोगिक प्रमुख मैन्युअल काम के बिना पूरा किए गए थे, तो यह "एक्स स्रोत, 0 लक्ष्य, वाई दोनों, 0 विरोधाभासी" जैसा होना चाहिए। दूसरे शब्दों में, लक्ष्य (वर्तमान) फ़ाइल में कोई सामग्री ब्लॉक नहीं है जो पहले से ही स्रोत शाखा की प्रति (प्रायोगिक) में नहीं हैं। आप ऑटोमर्ज ऑल बटन का सुरक्षित रूप से उपयोग कर सकते हैं।
नोट: ऑटोमर्ज सुरक्षित रहना चाहिए। यह हर मामले को हल करने की क्षमता के लिए प्रारंभिक चेतावनियों के बारे में रूढ़िवादी होने के लिए अनुकूलित है। लेकिन मैं मानता हूं कि हम में से कई - स्वयं शामिल हैं - जब कोई सवाल है तो मर्ज टूल को आग लगाना पसंद है। वर्णित परिदृश्य में, आईएमओ, यहां तक कि सबसे ज्यादा स्कीट आराम कर सकते हैं।
बिल्कुल कोई संघर्ष क्यों है?और क्या होगा यदि सारांश संदेश नहीं है तो & सूखा? खुशी है कि आपने पूछा :) संक्षिप्त उत्तर - क्योंकि संबंधित फाइलों के सामान्य पूर्वजों ("आधार") को निर्धारित करने वाली गणना इस बात पर निर्भर करती है कि उनके बीच संघर्ष विलय कैसे हल हो गया था। सरल उदाहरण: -> बी
- दो शाखाओं, ए और बी
- फ़ाइल के अलग अलग हिस्सों में एक \ foo.cs में संपादन और बी \ foo.cs बनाने
- मर्ज एक की स्थापना
- AutoMerge संघर्ष
- मर्ज बी -> एक
TFS चाहिए झंडा परस्पर विरोधी के रूप में की घटनाओं के इस क्रम। बी \ foo.cs; 4 और ए \ foo.cs; 2 के बीच निकटतम सामान्य पूर्वज चरण 1 पर वापस सभी तरह से निहित है, और तब से दोनों पक्ष स्पष्ट रूप से बदल गए हैं।
यह कहने के लिए आकर्षक है कि & बी चरण 4 के बाद सिंक में हैं। (अधिक सटीक: चरण 5 के विलय के लिए सामान्य पूर्वज संस्करण # 2 है)। निश्चित रूप से एक सफल सामग्री विलय का तात्पर्य है कि बी \ foo.cs में किए गए सभी परिवर्तन शामिल हैं?
व्यापकता: सभी संघर्षों AutoMerged किया जा सकता है नहीं दुर्भाग्य से आप इस कल्पना नहीं कर सकते कई कारणों से कर रहे हैं। आपको उन मानदंडों की आवश्यकता है जो दोनों परिदृश्यों पर लागू हों।
सुधार: ऑटोमर्ज सफल होने पर भी, यह हमेशा वैध कोड उत्पन्न नहीं करता है। एक क्लासिक उदाहरण तब उठता है जब दो लोग कक्षा परिभाषा के विभिन्न हिस्सों में एक ही क्षेत्र जोड़ते हैं।
लचीलापन: प्रत्येक स्रोत नियंत्रण उपयोगकर्ता के अपने पसंदीदा विलय टूल होते हैं। और उन्हें प्रारंभिक समाधान निर्णय ["किसी भी तरह से सामग्री को मर्ज करने की आवश्यकता है"] और अंतिम चेकइन ["यहां, यह काम करता है]] के बीच विकास/परीक्षण जारी रखने की क्षमता की आवश्यकता है।
आर्किटेक्चर: टीएफएस जैसे केंद्रीकृत सिस्टम में, सर्वर बस कुछ भी भरोसा नहीं कर सकता है, बल्कि अपने डेटाबेस + एपीआई की सत्यापन आवश्यकताओं को भी भरोसा नहीं कर सकता है। जब तक इनपुट spec को पूरा करता है, सर्वर को को अलग करने की कोशिश नहीं करनी चाहिए विभिन्न प्रकार के सामग्री विलय किए गए थे। (यदि आपको लगता है कि अब तक परिदृश्य आसानी से प्रतिष्ठित हैं, तो विचार करें: क्या होगा यदि ऑटोमर्ज इंजन में एक बग है? क्या होगा यदि एक दुष्ट क्लाइंट वेबसाईट को मनमाने ढंग से फ़ाइल सामग्री के साथ सीधे कॉल करता है? केवल सतह को खरोंच कर रहा है ... सर्वर को संदेह होना चाहिए एक कारण के लिए!) यह सुरक्षित रूप से गणना कर सकता है आपने मुझे एक परिणामस्वरूप फ़ाइल भेजी है जो स्रोत से मेल नहीं खाती है या लक्षित करती है।
एक साथ इन आवश्यकताओं को लाना है, तो आप एक डिजाइन कि एक काफी व्यापक श्रेणी भी मैनुअल ओवरलैपिंग संपादन से उत्पन्न मर्ज के, सामग्री का आपस में विलय [ऑटो या नहीं] 3 द्वारा प्रदान की शामिल है कि में चरण 4 में हमारे कार्यों गांठ के साथ खत्म पार्टी टूल्स, और फाइलें इस तथ्य के बाद हाथ से संपादित की गईं। टीएफएस शब्दावली में यह AcceptMerge संकल्प है। एक बार इस तरह दर्ज होने के बाद, मर्ज (टीएम) के नियमों को ऐतिहासिक अखंडता और भविष्य के संचालन की सुरक्षा में सबसे बुरी तरह मानना है। इस प्रक्रिया में चरण 4 के लिए आपके अर्थपूर्ण इरादों ("बी में पूरी तरह से शामिल होने वाले प्रत्येक परिवर्तन को # 2 में शामिल किया गया है) को शुद्ध तर्क के कुछ बाइट्स पर गिरा दिया गया था (" बी को निम्नलिखित नई सामग्री + हैंडलिंग के लिए क्रेडिट दें # 2 ")। दुर्भाग्यपूर्ण होने पर, यह "बस" एक यूएक्स/शिक्षा समस्या है। जब लोग विलय के नियम खराब धारणाएं करते हैं तो टूटे हुए कोड और डेटा हानि की ओर अग्रसर होते हैं। इसके विपरीत, आपको बस एक बटन क्लिक करना है।
एफडब्ल्यूआईडब्ल्यू, इस कहानी के कई अन्य अंत हैं। यदि आपने चरण 4 में स्रोत शाखा [उर्फ स्वीकृतिथीर्स] से प्रतिलिपि चुना है, तो चरण 5 में कोई संघर्ष नहीं होगा। अगर आपने AcceptMerge रिज़ॉल्यूशन चुना है, तो एक ही MD5 हैश के साथ फ़ाइल को ए \ foo.cs; 2 के रूप में करने के लिए हुआ । यदि आपने इसके बजाय लक्ष्य लक्ष्य [उर्फ AcceptYours] चुना है, तो डाउनस्ट्रीम परिणाम फिर से बदलते हैं, हालांकि मुझे अभी विवरण याद नहीं है। जब आप अन्य परिवर्तनों (विशेष रूप से नाम बदलें) जोड़ते हैं, तो उपर्युक्त सभी जटिल हो जाते हैं, मेरे उदाहरण की तुलना में सिंक से कहीं अधिक शाखाएं मर्ज करें, चेरी कुछ संस्करण श्रेणियां चुनें और बाद में अनाथों से निपटें ....
संपादित करें: भाग्य के रूप में, किसी और ने बस एमएसडीएन मंच पर एक ही सवाल पूछा था। जैसा कि मेरी प्रकृति बनता है, मैंने उन्हें एक और लंबा जवाब लिखा जो पूरी तरह अलग हो गया! (हालांकि स्पष्ट रूप से एक ही महत्वपूर्ण बिंदुओं पर छूना) उम्मीद है कि इससे मदद मिलती है: http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/thread/e567b8ed-fc66-4b2b-a330-7c7d3a93cf1a
वाह, अच्छी और पूरी तरह से स्पष्टीकरण। यकीन नहीं है कि अगर मैं इसे पूरी तरह से प्राप्त करता हूं, लेकिन मुझे लगता है कि मैं टीएफएस टीम पर नहीं हूं: पी वैसे भी, यह समझ में आता है कि यह उतना आसान नहीं है जितना मैं चाहता था: पीआई । उनमें से कुछ विवादों का नाम बदल रहे थे, जहां मुझे सिर्फ विकल्पों में से एक चुनने के लिए कहा गया था। दूसरों को थोड़ा और जटिल थे। लेकिन ऐसा लगता है कि अब काम कर रहा है :) – Svish
मैंने एक और स्पष्टीकरण पोस्ट किया, उम्मीद है कि कम भ्रमित :) –