2010-04-23 24 views
6

Vì chúng tôi đã chuyển sang VS2010, chúng tôi đã nhận thấy một tệp .filters mới dường như chứa cấu trúc bộ lọc của dự án. Chúng tôi cũng đang sử dụng subversion như kiểm soát nguồn của chúng tôi.VS2010 .filter files và SVN

Thật không may, mỗi khi chúng tôi đăng ký bây giờ, chúng tôi kết thúc với các xung đột hợp nhất nếu có ai đó đã thêm tệp hoặc bộ lọc vào dự án. SVN có vẻ hoàn toàn không thể hợp nhất loại tệp này một cách chính xác mặc dù nó dựa trên văn bản. Nó nhận được khá bực bội.

Có ai khác đang giải quyết vấn đề này không? Có ai tìm ra giải pháp không?

Ví dụ xung đột, coder 'a' thêm whatever.txt và kiểm tra, coder 'b' thêm bộ lọc và tệp .cpp mới và cập nhật. Gets này:

<?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

Tôi đã thêm mẹo này vào http://stackoverflow.com/questions/2538149/global-ignore-pattern-for-tortoisesvn-visual-studio-2010 –

+1

Tôi sẽ không đề xuất làm điều đó cho đến khi câu hỏi về cách chia sẻ cấu trúc dự án mà không có tập tin đó được trả lời. Kể từ khi mất tập tin .filters biến toàn bộ điều vào một cấu trúc phẳng này thực sự có vẻ như một ý tưởng thực sự xấu. –

+0

Được rồi, tôi đang theo dõi chủ đề này để xem câu trả lời là gì. Cảm ơn. –

Trả lời

1

họ file xml đơn giản như visual studio file dự án khác - tôi không thể hiểu tại sao họ nên có bất kỳ hơn dễ bị xung đột hơn các tập tin dự án khác.

Những tệp này có bị coi là nhị phân chứ không phải văn bản không? Việc hợp nhất các tệp nhị phân sẽ không hoạt động - hãy kiểm tra thuộc tính svn để xem loại mime mà chúng được đặt thành (nếu không có kiểu mime nào được đặt, bạn sẽ ổn). Nếu loại mime được đặt, có thể bạn đang xử lý một sai số automatic property.

Cuối cùng, mọi người có thể liên tục thêm + xóa tệp - nếu có, bạn có thể chỉ cần cam kết và cập nhật thường xuyên hơn cho đến khi dự án được giải quyết thêm một chút.

Bạn chắc chắn không nên svn:ignore những tệp này.

+0

Câu trả lời này cho thấy rất nhiều hứa hẹn. Thực tế là các công cụ tài sản tự động không làm việc là không có gì ngạc nhiên vì nó xuất hiện có một số nhân vật sôi nổi vào đầu những điều đó không phải là văn bản. Đặt svn: mime-type cho tệp thành "text/xml" không giải quyết được sự cố. Có dude admin svn cố gắng tìm cách tiếp cận hệ thống rộng và chúng tôi sẽ cố gắng đó. –

+0

Nếu bạn có thể truy cập svn của bạn thông qua http - phổ biến, vì nhiều người sử dụng apache để lưu trữ svn - bạn chỉ có thể tải xuống tệp bộ lọc trong trình duyệt web của bạn và kiểm tra (ví dụ: bằng firebug hoặc http fiddler) như những gì mime gõ tệp kết thúc phục vụ. –

+1

Có thể "ký tự funky" ở đầu tập tin là một Dấu Byte-Order Unicode (http://en.wikipedia.org/wiki/Byte_order_mark) không? BOM không phải là vấn đề đối với UTF-8 hoặc UTF-16 do cách Subversion phân biệt giữa tệp văn bản và tệp nhị phân: http://subversion.apache.org/faq.html#binary-files. Nó sẽ gây ra một vấn đề với UTF-32 vì hai trong số những byte đó sẽ bằng không. –

0

Nếu ".filters" tập tin là một cái gì đó cụ thể để cấu hình của người dùng, sau đó nó có lẽ không thuộc về Subversion ở tất cả. Bạn có thể đặt Subversion bỏ qua các thay đổi đối với tệp bằng thuộc tính svn: ignore:

 
svn propset svn:ignore '.filters' . 

Lệnh Subversion bắt đầu bỏ qua các thay đổi đối với tệp có tên ".filters".

lựa chọn khác là để buộc Subversion để điều trị các ".filters" tệp dưới dạng một tập tin nhị phân:

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

Lệnh trên sẽ khiến ".filters" tập tin được đối xử như một tập tin nhị phân và sẽ không được hợp nhất.

Sửa
Bây giờ bạn đã giải thích rằng ".filters" tập tin là rất cần thiết cho dự án và cũng là vấn đề có thể là nó đang được coi là nhị phân thay vì dưới dạng văn bản thuần tuý, giải pháp là để thiết lập các loại để rõ:

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

Đây là câu trả lời tương tự mà người khác đã đưa ra và sau đó bị xóa. Việc mất các bộ lọc trong một dự án sẽ dẫn đến cấu trúc dự án hoàn toàn bằng phẳng để tất cả các tệp xuất hiện ở cấp cao nhất. Nó sẽ không hoạt động cho các dự án nhỏ. –

0

tôi sẽ cung cấp này liên quan đến mục đích của tập tin .vcxproj.filters:

Khi tôi tạo ra một dự án ++ C với Visual Studio 2010, phiên bản 10.0.40219.1 SP1Rel, nó tạo ra một file có tên ReadMe.txt trong thư mục dự án bao gồm các văn bản này:

<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). 

Vì vậy, trên thực tế, điều này khẳng định rằng tập tin .vcxproj.filters điều chỉnh cấu trúc thư mục mà bạn nhìn thấy trong Solution Explorer.

2

Chúng tôi đang gặp sự cố tương tự này. Nó không có gì để làm với họ không được sáp nhập một cách chính xác do tình trạng văn bản/nhị phân, mà là vì một sự lừa đảo của việc sáp nhập SVN.

Thông thường nếu một người cho biết thêm một tập tin mới cho dự án và cam kết thì diff sẽ được giống như:

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

Trong khi đó, user2 thêm một file mới với bộ lọc tương tự (ví dụ nút thư mục trong cây giải pháp):

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

Khi cập nhật user2 họ sẽ nhận được một cuộc xung đột

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

Điều quan trọng là cách bạn giải quyết xung đột. Nếu bạn sử dụng tùy chọn 'Sử dụng A rồi B' của công cụ hợp nhất thì bạn sẽ kết thúc với công cụ này:

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

là XML không hợp lệ. Thật không may VisualStudio không luôn luôn có vẻ phàn nàn về điều này (mặc dù nó thường - dường như phụ thuộc vào bản chất chính xác của sự thay đổi). Vì vậy, sau đó bạn có thể kết thúc với một số tác phẩm mồ côi từ bộ lọc của họ - Tôi nghĩ rằng trong trường hợp này nó sẽ cố gắng sửa chữa nó bằng cách hoàn thành <CLCompile> đầu tiên:

<ClCompile Include="dir1\newfile1" /> 

này sau đó có nghĩa là newfile1 sẽ xuất hiện ở phía trên mức độ của dự án hơn là trong bộ lọc dir1. Một khi bạn có một số nút không hợp lệ xuất hiện có vẻ như bạn sẽ bắt đầu nhận được nhiều xung đột hơn cho đến khi ai đó sửa dự án. Vì vậy, giải pháp cho tất cả điều này là bạn cần phải làm cho người dùng nhận thức được cấu trúc của tệp khi họ giải quyết xung đột, không chỉ dựa vào công cụ hợp nhất một cách mù quáng. Bạn phải đảm bảo rằng mọi mục nhập đều có 3 dòng: mở <CLCompile> hoặc <CLInclude>, bộ lọc và thẻ kết thúc.

Toàn bộ vấn đề này chỉ thực sự tồn tại do một sự lừa đảo của xml trong đó xung đột sẽ chỉ ảnh hưởng đến một hoặc hai trong ba dòng. Nếu thẻ kết thúc XML nằm trên cùng một dòng với bộ lọc thì nó sẽ không xảy ra.