2010-02-10 4 views
5

जब एक शाखा पर "नाम बदलें" जैसे एक साधारण रिफैक्टरिंग को अन्य शाखाओं में परिवर्तनों को मर्ज करना बहुत मुश्किल हो सकता है।क्या कोई 3 रास्ता विलय उपकरण है जो सामान्य रिफैक्टरिंग को "समझता है"?

अब मेरे सपनों में, मैं एक उपकरण है जो रिकॉर्ड कर सकते हैं की सोच रहा हूँ (या बाहर काम) क्या अच्छी तरह से परिभाषित पुनर्रचना (निकालें विधि बहुत कठिन के रूप में मर्ज उपकरण अच्छी तरह से अपरिवर्तित ब्लॉक मैच के लिए नहीं लग रहे है) एक शाखा पर संचालन किया गया है और फिर उन्हें दूसरी शाखा में "रीप्ले" किया गया है, बल्कि रिफैक्टरिंग प्रभावित होने वाली प्रत्येक पंक्ति को मर्ज करने की कोशिश करने के बजाय।

भी मेरी दर्द के अन्य आधे के लिए यह वह जगह है, सिद्धांत रूप में, रिफैक्टरिंग अवगत स्रोत नियंत्रण देख "Is there an intelligent 3rd merge tool that understands VB.NET"!


इसके अलावा किसी को भी MolhadoRef (blog article about MolhadoRef and Refactoring-aware SCM) की तरह कुछ कोशिश की है,।

उत्तर

2

आप विभिन्न शाखाओं पर उसी प्रकार के रिफैक्टरिंग ऑपरेशन करने के लिए coccinelle का उपयोग कर सकते हैं। यह रिकॉर्ड नहीं करेगा या यह पता लगाएगा कि क्या किया जा रहा है, आपको स्पष्ट रूप से यह बताना होगा कि क्या करना है, लेकिन इसके अलावा यह उतनी ही कम आसानी से उतनी ही कम प्रतिक्रिया करेगा जितनी आप इसे इंगित करते हैं।

यह उपकरण updating API usage आदि

के लिए लिनक्स कर्नेल में इस्तेमाल किया गया है अपने वेब पेज से उद्धृत करने के लिए:

"Coccinelle एक कार्यक्रम मिलान और परिवर्तन इंजन जो भाषा SMPL प्रदान करता है (सी कोड में वांछित मैचों और परिवर्तनों को निर्दिष्ट करने के लिए अर्थात् पैच भाषा)। "

+0

करुणा यह सी # या वीबी.नेट के लिए काम नहीं करती है लेकिन कम से कम किसी और ने समस्या के बारे में सोचा है। –

0

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

+0

हमने पाया है कि अरक्सिस मर्ज सबसे अच्छा पारंपरिक विलय उपकरण में से एक है। (ऑटोमेशन एपीआई मदद नहीं करेगा, क्योंकि इसे समस्या का "खुद" करने के लिए रिफैक्टरिंग टूल की आवश्यकता है) –

-1

लिनक्स में आप Meld या विंडोज Winmerge का उपयोग कर सकते हैं।

किसी भी मामले में, दोनों टूल्स टेक्स्ट की पंक्तियों के बारे में केवल "समझते हैं"। रिफैक्टरिंग को कोड को समझने का एक तरीका आवश्यक है, जो कि मुझे ज्ञात किसी भी विलय/तुलनात्मक उपकरण से परे है।

2

Darcs एक प्रतिबद्ध में एक 'token replace' ऑपरेशन है, जो दूसरे के साथ एक टोकन के सभी उदाहरणों की जगह का समर्थन करता है, और विलीन हो जाती है के रूप में आप यह करना चाहते हैं।

+0

"टोकन प्रतिस्थापन" के साथ समस्या यह है कि एक सुरक्षित नाम के लिए गुंजाइश को लेना आवश्यक है –

0

प्लास्टिक एससीएम (www.plasticscm.com) 3-तरफा विलय उपकरण Xmerge लागू करता है जो केवल स्थानांतरित हो जाने वाले कोड को विलय करने में आपकी सहायता करने में सक्षम है।

0

अब कुछ बेहतर मर्ज टूल (उदाहरण के लिए SemanticMerge) हैं जो भाषा पार्सिंग पर आधारित हैं, जो कोड को स्थानांतरित और संशोधित किए गए कोड से निपटने के लिए डिज़ाइन किए गए हैं। जेटब्रेन (रीशेपर का निर्माण) ने अभी इस पर blog पोस्ट किया है।

पिछले कुछ वर्षों में पर पिछले पर कुछ उत्पाद बाजार में आ रहे हैं।

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