2008-12-16 7 views
26

विलय परियोजना/समाधान फाइल डेवलपर्स/एससीएम प्रशासकों के बीच एक प्रसिद्ध आपदा है जो उनके स्रोत नियंत्रण में विलय कर रही है।vcproj फ़ाइलों को विलय करना - एससीएम का नरक

उदाहरण के लिए, एक आम परिदृश्य लें: दो अलग-अलग शाखाओं में एक परियोजना/समाधान पर विकास किया जाता है। जब मुख्य विकास रेखा में वापस आने के लिए समय आता है, तो वीसीपीआरजे (और एसएलएन) के बीच बहुत ही कम समानता होती है।

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

मैं मान सकता हूं कि माइक्रोसॉफ्ट vcproj संरचनाओं को पकड़ने के लिए कुछ perl हैशिंग सिस्टम का उपयोग कर रहा है, इसलिए सहेजने वाले ऑपरेशन पर फ़ाइलों का प्रतिपादन आदेश नहीं दिया जाता है।

मैं पहले पूछना चाहूंगा: क्या किसी को इसे हल करने के लिए कुछ सुरुचिपूर्ण तरीका मिला?

दूसरा, मैं दो सुझाव देने के लिए करना चाहते हैं:

  • माइक्रोसॉफ्ट ऊपर फ़ाइलों reimplement और उन्हें तत्वों में से कुछ कठोर आदेश तक सीमित कृपया है।

  • एक उपकरण को खोजने के (या एक लिखने) कि vcproj (xml प्रारूप) और SLN (SLN प्रारूप ...) क्रमबद्ध करता वर्णानुक्रम फ़ाइलें, रिकर्सिवली (तत्वों आदि के भीतर सभी तत्वों)। स्रोत और लक्ष्य फ़ाइलों दोनों पर इस टूल का उपयोग करके परिवर्तनों को आसानी से इंगित करने (और विलय) करने में सक्षम हो जाएगा, उम्मीद है कि विजुअल स्टूडियो क्रमबद्ध, मर्ज किए गए प्रोजेक्ट या एसएलएन फ़ाइल को पढ़ता है।

कोई अन्य विचार और विचार स्वागत है।

+0

मुझे आपका टूल विचार पसंद है। ऐसा लगता है कि मुझे एक उपयोगी चीज है। शायद मुझे यह जाना होगा ... – Tim

+0

आप कितने आश्वस्त हैं कि समाधान फ़ाइलों में तत्वों का क्रम कोई महत्व नहीं है? कहें, प्रोजेक्टसेक्शन (प्रोजेक्ट पर निर्भरता) और ग्लोबलसेक्शन (TeamFoundationVersionControl) अनुभागों के भीतर? क्या कहीं भी एक प्रकाशित प्रारूप है? –

उत्तर

1

आप उन फ़ाइलों के भीतर पुन: आदेश लागू करने के लिए अपने एससीएम (एसवीएन के लिए पुनः प्रतिबद्धता हुक की तरह) के भीतर एक ट्रिगर के साथ अपने उपकरण को जोड़ने पर विचार करना चाहेंगे।

फिर आप इन तत्वों को एक साथ कुशलतापूर्वक विलय करने का मौका खड़े होंगे।

1

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

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

4

मैंने समाधान फ़ाइल (http://slntools.codeplex.com) की तुलना और विलय करने के लिए एक टूल बनाया है। 'जेनेरिक विलय' की तुलना में टूल के साथ समाधान को मर्ज करना बहुत आसान है। यह प्रोजेक्ट फाइलों को सोचा नहीं जा सकता है।

+0

मैं SLNTools का उपयोग कर रहा हूं और मुझे लगता है कि यह वास्तव में अच्छी तरह से काम करता है। –

+0

मैंने अभी कोशिश की है, लेकिन यह वीएस और एसडी दोनों द्वारा संपादित की गई परियोजनाओं की तुलना करते समय त्रुटियां देता है। –

1

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

3

Project: Merge एक्सएमएल फाइलों की तुलना और विलय करने के लिए मेरा टूल है। मैंने मूल रूप से इसे लिखा क्योंकि मुझे विजुअल स्टूडियो प्रोजेक्ट फ़ाइलों के साथ बिल्कुल इस समस्या का सामना करना पड़ रहा था।

यह एक्सएमएल फ़ाइल के भीतर पुन: आदेशित तत्वों और/या विशेषताओं का सही ढंग से पता लगाता है और स्वचालित रूप से लगभग सभी 'संघर्ष' को सही ढंग से हल करेगा।

1

चेक स्थापना विकल्प - यह सुनिश्चित करें कि अपने सभी सहयोगियों 64 संकलक घटक स्थापित (या बिल्कुल भी नहीं है) कर

0

एक गूगल परियोजना का नाम दिया ढकोसला है कि दृश्य स्टूडियो समाधान और परियोजनाओं CMake की तरह बहुत उत्पन्न करता है। उस प्रोजेक्ट का हिस्सा क्रमशः xml नोड्स और .sln और .vcproj फ़ाइलों के गुणों को क्रमबद्ध करने के लिए अजगर उपकरण हैं: pretty_sln और pretty_vcproj। आप http://gyp.googlecode.com/svn/trunk/tools/

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

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