2008-10-10 27 views
20

CVS và Subversion đều có tính năng hợp nhất tiện dụng để khi bạn cập nhật tệp nguồn mà bạn đã sửa đổi, nó sáp nhập trong những thay đổi mà những người khác đã thực hiện trên cùng một tệp.CVS và Subversion có thể được đặt để bỏ qua khoảng trắng trong khi hợp nhất không?

Tuy nhiên, nếu thay đổi của bạn và các thay đổi khác không tương thích - thường là nếu bạn đã thay đổi cùng một phần mã - nó sẽ tạo ra xung đột. Cả hai đoạn mã nguồn sẽ được đưa vào tệp được hợp nhất và bạn cần phải tự sắp xếp những thay đổi cần lưu giữ. Tất cả đều ổn.

Vấn đề của tôi là một số người trong chúng ta sử dụng các môi trường phát triển khác nhau (Netbeans so với vi nếu bạn phải biết) và Netbeans có tính năng tự động thụt lề lại thụt vào mã. Do đó, khi chúng tôi hợp nhất các thay đổi, đôi khi chúng tôi nhận được các xung đột lớn mà chủ yếu là do những thay đổi đơn giản trong thụt lề và không phải là thay đổi chính xác đối với mã. Thường thì chúng tạo ra hàng trăm các xung đột rõ ràng phải được giải quyết thủ công, nhưng thường chúng chỉ là một vài dòng thay đổi thực sự. Tình huống tương tự xảy ra khi trình chỉnh sửa của ai đó thay đổi unix thành các dòng mới của Windows hoặc ngược lại.

Vì vậy - tôi có thể đặt hợp nhất để bỏ qua những "xung đột" này khi so sánh hai phiên bản không? Diff có tùy chọn --ignore-space-change hoặc -b và tôi muốn có tính năng cơ bản giống như trong cvs hoặc svn. Chúng tôi sử dụng từng công cụ trên các dự án khác nhau nên tôi rất vui khi có câu trả lời cho cả hai hoặc cả hai.

Hai lưu ý cuối cùng:

  • rõ quá trình hợp nhất sẽ phải thực hiện một sự lựa chọn tùy ý như mà phiên bản của khoảng trắng để sử dụng trong các tập tin sáp nhập. Tôi ổn với điều đó - chúng ta luôn có thể định dạng lại nó sau.
  • Tôi có thể tránh một số điều này do bị kỷ luật và kiểm tra thường xuyên hơn - được thừa nhận và hiểu rõ. Nhưng tôi không hoàn hảo.

Trả lời

11

Đối với SVN: Trong công cụ dòng lệnh, có tùy chọn -x mà bạn có thể thiết lập để "b" hoặc "w" để bỏ qua không gian thay đổi resp. tất cả các không gian.
Bạn cũng có thể cung cấp công cụ của bên thứ ba để thực hiện việc hợp nhất. Vì vậy, nếu bạn có một sự hợp nhất mà bỏ qua khoảng trắng, bạn có thể sử dụng cái này. TortoiseSVN, như thường lệ, là giao diện người dùng cho tất cả các tham số, vì vậy nó cũng sẽ hỗ trợ bỏ qua khoảng trắng.

Lệnh svn merge được mô tả here. Các tùy chọn mà bạn cần là --diff3-cmd

+0

Nghe hay, cảm ơn. Sau đó, câu hỏi tiếp theo là: không ai biết sáp nhập có thể bỏ qua khoảng trắng? Trên một câu hỏi khác, tôi tìm thấy một vài công cụ kết hợp trực quan trông rất đẹp (meld, tortoisesvn) nhưng có ai biết về một công cụ dòng lệnh không? –

+0

bạn có thể nhìn vào winmerge (http://www.winmerge.org/) Đây là mã nguồn mở và bạn có thể dễ dàng sử dụng nó trong tortoiseSVN như là trình xem khác/hợp nhất –

+0

Tôi đã xem xét điều này trên Linux, và nó xuất hiện ở đó không có cách nào dễ dàng để làm điều này. Ví dụ: bạn có thể yêu cầu nó sử dụng "diff3" nhưng không có tham số để bỏ qua khoảng trắng. Nhưng bạn có thể chuyển một tham số đó để sử dụng một chương trình "khác" khác. Vì vậy, bạn có nó gọi là "diff -b". Nhưng sau đó bạn không thể làm điều đó đệ quy (rõ ràng) từ lệnh SVN (ví dụ, svn (sử dụng diff3 (sử dụng (diff -b)))). Giải pháp mà tôi sẽ điều tra tiếp theo là tạo một kịch bản lệnh shell gọi "diff3" bằng cách sử dụng "diff" để bỏ qua khoảng trắng. Sau đó, tôi sẽ có SVN sử dụng kịch bản lệnh shell. – UncaAlby

5

Đối với người dùng Windows, bạn có thể sử dụng TortoiseSVN (một phần mở rộng vỏ Windows Explorer cho Subversion) mà đi kèm với merge features có hỗ trợ những gì bạn đang mô tả:

Bỏ qua các kết thúc dòng không bao gồm các thay đổi chỉ do sự khác biệt trong kiểu đầu dòng.

So sánh khoảng trắng bao gồm tất cả thay đổi trong thụt đầu dòng và nội dòng khoảng trắng dưới dạng các dòng được thêm/xóa.

Bỏ qua các thay đổi khoảng trắng không bao gồm các thay đổi chỉ đến hạn thay đổi về số lượng hoặc loại khoảng trắng, ví dụ:thay đổi các chữ số thụt lề hoặc thay đổi các tab thành không gian. Thêm khoảng trống nơi có trước đó, hoặc xóa hoàn toàn khoảng trắng vẫn hiển thị làm thay đổi.

Bỏ qua tất cả khoảng trắng không bao gồm tất cả thay đổi chỉ khoảng trắng.

0

TortoiseMerge không có bất kỳ CLA (Đối số dòng lệnh) nào để bỏ qua khoảng trắng và bỏ qua trường hợp. Sau khi tìm kiếm rất nhiều có vẻ như nó có thể đạt được vẫn bằng cách tinh chỉnh các giá trị đăng ký.

/* DisableWhitespaceDifferences and DisableCaseDifferences. 
* The settings for TortoiseMerge is stored in Registry in CurrentUser\Software\TortoiseMerge\ 
* DWORDS stored the property values. 
* 
* IgnoreWS   : Set to 1 to ignore the whitespace differences. 
*      Set to 0 to allow the whitespace differences.    
* IgnoreEOL  : Set to 1 to ignore the End of Line differences. 
*      Set to 0 to allow the End of Line differences.    
* CaseInsensitive : Set to 1 to ignore the Case differences. 
*      Set to 0 to allow the Case differences.    
*/ 

// Get the key from the registry 
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\TortoiseMerge", true)) 
{ 
    if (key != null) 
    { 
     // Set the IgnoreWS and IgnoreEOL DWORDs based on DisableWhitespaceDifferences is set or not 
     key.SetValue("IgnoreWS", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord); 
     key.SetValue("IgnoreEOL", DisableWhitespaceDifferences ? 1 : 0, RegistryValueKind.DWord); 

     // Set the CaseInsensitive DWORD based on DisableCaseDifferences is set or not 
     key.SetValue("CaseInsensitive", DisableCaseDifferences ? 1 : 0, RegistryValueKind.DWord); 

     // close key 
     key.Close(); 
    } 
} 
Các vấn đề liên quan