2010-04-23 14 views
6

चूंकि हमने वीएस -2010 में स्विच किया है, हमने एक नई फाइल देखी है जो स्पष्ट रूप से प्रोजेक्ट की फ़िल्टर संरचना है। हम अपने स्रोत नियंत्रण के रूप में उपversण का भी उपयोग कर रहे हैं।वीएस -2010। फिल्टर फाइलें और एसवीएन

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

क्या कोई और इस समस्या से निपट रहा है? क्या किसी को समाधान मिला?

उदाहरण संघर्ष, कोडर 'ए' जो भी.txt जोड़ता है और चेक करता है, कोडर 'बी' फ़िल्टर और नई .cpp फ़ाइल और अपडेट जोड़ता है। हो जाता है इस:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <Filter Include="filter_1"> 
     <UniqueIdentifier>{065f6d5d-81b2-4c98-b313-dceb16c24bf2}</UniqueIdentifier> 
    </Filter> 
    <Filter Include="filter_2"> 
     <UniqueIdentifier>{85ef5151-d045-4b20-b1bf-e65d380a3cf3}</UniqueIdentifier> 
    </Filter> 
    <Filter Include="filter_2\sub_filter_1"> 
     <UniqueIdentifier>{90efdbe3-b53a-41fc-9dfb-147df5e7d7f3}</UniqueIdentifier> 
    </Filter> 
    <Filter Include="NewFilter1"> 
     <UniqueIdentifier>{8162b584-12a0-4a05-8cc5-ede4ced07ba3}</UniqueIdentifier> 
    </Filter> 
    </ItemGroup> 
    <ItemGroup> 
    <ClInclude Include="filter_2\file_3.hpp"> 
     <Filter>filter_2</Filter> 
    </ClInclude> 
    <ClInclude Include="filter_2\sub_filter_1\file_4.hpp"> 
     <Filter>filter_2\sub_filter_1</Filter> 
    </ClInclude> 
    <ClInclude Include="filter_1\file_1.hpp"> 
     <Filter>filter_1</Filter> 
    </ClInclude> 
    <ClInclude Include="filter_1\file_2.hpp"> 
     <Filter>filter_1</Filter> 
    </ClInclude> 
    </ItemGroup> 
<<<<<<< .mine 
    <ItemGroup> 
    <ClCompile Include="whatnot.cpp"> 
     <Filter>NewFilter1</Filter> 
    </ClCompile> 
    </ItemGroup> 
======= 
    <ItemGroup> 
    <None Include="whatever.txt" /> 
    </ItemGroup> 
>>>>>>> .r12513 
</Project> 
+0

मैंने इस टिप को http://stackoverflow.com/questions/2538149/global-ignore-pattern-for-tortoisesvn-visual-studio-2010 –

+1

पर जोड़ा है, इस बारे में सवाल तक कि मैंने ऐसा करने की सिफारिश नहीं की होगी उस फ़ाइल के बिना परियोजना संरचना साझा करें। चूंकि फ़िल्टर फ़ाइल का नुकसान पूरी चीज को एक फ्लैट संरचना में बदल देता है, यह वास्तव में वास्तव में एक बुरा विचार जैसा लगता है। –

+0

ठीक है, मैं यह देखने के लिए इस विषय पर नजर रख रहा हूं कि जवाब क्या है। धन्यवाद। –

उत्तर

1

वे दृश्य स्टूडियो अन्य परियोजना फाइलों की तरह सादा एक्सएमएल फ़ाइलें कर रहे हैं - मैं नहीं देख सकते हैं कि क्यों वे अन्य परियोजना फ़ाइलों से संघर्ष के लिए किसी भी अधिक अतिसंवेदनशील होना चाहिए।

क्या ये फ़ाइलें पेचेंस को बाइनरी के रूप में माना जाता है, पाठ के रूप में नहीं? बाइनरी फाइलों को विलय करना काम नहीं करेगा - यह देखने के लिए svn गुणों की जांच करें कि वे किस प्रकार के माइम-टाइप पर सेट हैं (यदि कोई माइम-प्रकार सेट नहीं है, तो आपको ठीक होना चाहिए)। यदि माइम प्रकार सेट किया गया है, तो यह संभव है कि आप किसी गलत कॉन्फ़िगर किए गए automatic property से निपट रहे हों।

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

आपको इन फ़ाइलों को svn:ignore नहीं करना चाहिए।

+0

इस उत्तर ने बहुत सारे वादे दिखाए। तथ्य यह है कि ऑटो प्रॉपर्टी सामान काम नहीं कर रहा है, यह आश्चर्य की बात नहीं है क्योंकि ऐसा लगता है कि इन चीजों की शुरुआत में कुछ फंकी चरित्र है जो पाठ नहीं है। Svn को सेट करना: फ़ाइल के लिए "टेक्स्ट/एक्सएमएल" के लिए माइम-प्रकार समस्या को हल नहीं किया गया है। Svn व्यवस्थापक दोस्त होने से सिस्टम व्यापक दृष्टिकोण खोजने का प्रयास करें और हम इसे आजमाएंगे। –

+0

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

+1

फ़ाइल की शुरुआत में "फंकी चरित्र" एक यूनिकोड बाइट-ऑर्डर मार्क (http://en.wikipedia.org/wiki/Byte_order_mark) हो सकता है? बीओएम को यूटीएफ -8 या यूटीएफ -16 के लिए कोई समस्या नहीं होनी चाहिए, जिस तरह से सबवर्सन टेक्स्ट फाइलों और बाइनरी फाइलों के बीच अंतर करता है: http://subversion.apache.org/faq.html#binary-files। इससे यूटीएफ -32 के साथ समस्या होगी क्योंकि उनमें से दो बाइट शून्य होंगे। –

0

".filters" फ़ाइल कुछ उपयोगकर्ता के विन्यास के लिए विशिष्ट है, तो यह शायद सबवर्सन में बिल्कुल भी नहीं है। प्रॉपर्टी को नकारने:: आप सबवर्सन SVN का उपयोग कर फ़ाइल में परिवर्तन की उपेक्षा कर सकते हैं

 
svn propset svn:ignore '.filters' . 

आदेश ऊपर सबवर्सन ".filters" नाम फ़ाइल में परिवर्तन की अनदेखी शुरू कर देगा। एक बाइनरी फ़ाइल के रूप में इलाज किया जाना है ".filters" फ़ाइल

 
svn propset svn:mime-type 'application/octet-stream' .filters 

आदेश ऊपर का कारण होगा और होगा:

एक अन्य विकल्प एक बाइनरी फ़ाइल के रूप में ".filters" फ़ाइल के इलाज के लिए सबवर्सन मजबूर करने के लिए है विलय नहीं किया जाएगा।

संपादित
अब आप की व्याख्या की है कि है कि ".filters" फ़ाइल परियोजना के लिए आवश्यक है और यह भी समस्या हो सकती है कि है कि यह द्विआधारी के रूप में के बजाय सादे पाठ के रूप में इलाज किया जा रहा है, समाधान है प्लेन को प्रकार सेट करने:

svn propset svn:mime-type 'text/plain' .filters 
+2

यह वही उत्तर है जो किसी और ने दिया और फिर हटा दिया। एक परियोजना में फिल्टर को पूरी तरह से फ्लैट परियोजना संरचना में खोना ताकि सभी फाइलें शीर्ष स्तर पर दिखाई दें। यह छोटी परियोजनाओं के लिए भी काम नहीं करेगा। –

0

मैं .vcxproj.filters फ़ाइल के उद्देश्य के बारे में इस प्रदान करेंगे:

जब मैं दृश्य स्टूडियो 2010, संस्करण 10.0.40219 साथ एक सी ++ प्रोजेक्ट बनाते हैं।

<YourProjectName>.vcxproj.filters 
    This is the filters file for VC++ projects generated using an Application Wizard. 
    It contains information about the association between the files in your project 
    and the filters. This association is used in the IDE to show grouping of files with 
    similar extensions under a specific node (for e.g. ".cpp" files are associated with the 
    "Source Files" filter). 

तो, वास्तव में, यह पुष्टि की है कि .vcxproj.filters फ़ाइल फ़ोल्डर संरचना है कि आप समाधान Explorer में देखने को नियंत्रित करता है: 1 SP1Rel, यह है कि इस पाठ में शामिल परियोजना फ़ोल्डर में ReadMe.txt नाम की एक फ़ाइल उत्पन्न करता है।

2

हम इसी समस्या का सामना कर रहे हैं। टेक्स्ट/बाइनरी स्थिति के कारण उन्हें सही ढंग से विलय नहीं किया जा रहा है, बल्कि एसवीएन विलय के क्विर्क की वजह से उनके साथ कुछ भी नहीं करना है।

आमतौर पर अगर एक व्यक्ति परियोजना के लिए एक नई फ़ाइल कहते हैं और की तरह कुछ तो अंतर हो जाएगा करता है:

<ClCompile Include="dir1\newfile1"> 
     <Filter>dir1</Filter> 
    </ClCompile> 

इस बीच, user2 ही फिल्टर करने के लिए एक नई फ़ाइल (में यानी फ़ोल्डर नोड कहते हैं समाधान पेड़):

<ClCompile Include="dir1\newfile2"> 
     <Filter>dir1</Filter> 
    </ClCompile> 

user2 अपडेट वे एक संघर्ष मिलेगा जब

<<<<< 
    <ClCompile Include="dir1\newfile1"> 
    ===== 
    <ClCompile Include="dir1\newfile2"> 
    >>>>>> 
     <Filter>dir1</Filter> 
    </ClCompile> 

महत्वपूर्ण बात यह है कि आप संघर्ष को कैसे हल करते हैं। यदि आप अपने मर्ज टूल के 'ए का उपयोग करें' विकल्प का उपयोग करते हैं तो आप इसके साथ समाप्त हो जाएंगे:

<ClCompile Include="dir1\newfile1"> 
    <ClCompile Include="dir1\newfile2"> 
     <Filter>dir1</Filter> 
    </ClCompile> 

जो अवैध XML है। दुर्भाग्य से विजुअलस्टूडियो हमेशा इस बारे में शिकायत नहीं करता है (हालांकि यह आमतौर पर करता है - परिवर्तन की सटीक प्रकृति पर निर्भर करता है)। मैं इस मामले में लगता है कि यह पहले <CLCompile> परिष्करण करके इसे ठीक करने की कोशिश करेंगे - तो क्या आप फिर कुछ उनके फिल्टर से अनाथ फाइलों के साथ खत्म कर सकते हैं:

<ClCompile Include="dir1\newfile1" /> 

यह तो मतलब है कि newfile1 शीर्ष पर दिखाई देगा dir1 फ़िल्टर की बजाय परियोजना का स्तर। एक बार आपके पास कुछ अमान्य नोड्स दिखाई देने के बाद ऐसा लगता है कि जब तक कोई व्यक्ति इस परियोजना को ठीक नहीं करता तब तक आपको और अधिक संघर्ष मिलना शुरू हो जाएगा।

तो, इसका समाधान यह है कि जब आप विवादों को हल करते हैं तो उपयोगकर्ताओं को फ़ाइल की संरचना के बारे में जागरूक करने की आवश्यकता होती है, न केवल मर्ज टूल पर भरोसा करते हैं। आपको यह सुनिश्चित करना होगा कि प्रत्येक प्रविष्टि में सभी 3 लाइनें हों: उद्घाटन <CLCompile> या <CLInclude>, फ़िल्टर और अंत टैग।

यह पूरी समस्या केवल एक्सएमएल के क्विर्क की वजह से मौजूद है, जिसमें एक संघर्ष केवल तीन पंक्तियों में से एक या दो को प्रभावित करेगा। यदि एक्सएमएल एंड टैग फ़िल्टर के समान लाइन पर था तो ऐसा नहीं होगा।