2010-07-18 20 views
14

Tôi đang cố hợp nhất hai tệp .nib. FileMerge không có vấn đề gì khi hiển thị so sánh hai tệp. Tôi đang cố gắng giữ tất cả các cài đặt trong một tệp (nghĩa là bên phải) ngoại trừ hai cài đặt mà tôi muốn sao chép từ tệp khác (ví dụ: bên trái). Sự khác biệt chỉ là một dòng mã, mỗi mã thay đổi giá trị số nguyên của một khóa autoresizingMask. Vì vậy, nó không phải là khó để hợp nhất. Tôi sẽ sử dụng TextEdit nếu nó cho phép tôi mở một tập tin .nib.FileMerge .nib loại tệp không thể được hợp nhất

Tuy nhiên tôi gặp lỗi "Không thể hợp nhất loại tệp này". Tôi đã thử chơi với các cài đặt FileMerge> Preferences> Filters cho phần mở rộng .nib như đã đề cập trong câu trả lời cho một câu hỏi tương tự được đăng trên trang này nhưng không có may mắn. Theo như tôi có thể nói các thiết lập hiển thị nên được trái như "lọc" cho một. Nib kể từ khi không lọc nó không thể đọc được và tôi đã cố gắng chuyển đổi các lựa chọn áp dụng. Tôi cho rằng Bộ lọc thực tế được sử dụng nên không được thay đổi hoặc sửa đổi?

Có bất kỳ lý do phổ biến nào khiến hai tệp .nib mà FileMerge không hiển thị trong cửa sổ so sánh không được hợp nhất?

Cảm ơn

Trả lời

3

Không thể hợp nhất các tệp NIB và XIB, tuy nhiên điều này có thể hấp dẫn. Nó có thể hữu ích để xem xét một diff bằng cách sử dụng FileMerge, nhưng chỉ sử dụng thông tin này để thông báo những thay đổi bạn tự tái tạo trong giao diện Builder.

Ngoài ra, FileMerge không hiển thị sự khác biệt văn bản thực tế của các tệp NIB, mà đúng hơn là đầu ra từ ibtool. Bạn có thể thấy sự khác biệt của văn bản thực tế bằng cách xóa mục nhập cho các NIB trong tùy chọn FileMerge, nhưng cài đặt này không được lưu giữa các lần khởi chạy FileMerge.

+0

Bạn hoàn toàn đúng. Một nib/xib là một phiên bản táo của một XML được gọi là một danh sách đặc tính (viết tắt là plist. Có thể bạn đã thấy chúng trong các tệp tài nguyên mẫu). Để chứng minh điều này, nhấp chuột phải vào nib/xib, vào 'Open As' và nhấp vào 'Property List'. Không có tệp nào khác (ngoại trừ một .plist) có thể được mở theo cách này. Để thay đổi lại, hãy quay lại 'Open As' và nhấp vào 'Interface Builder' –

+1

Chase, điều đó không hoàn toàn chính xác. Các tệp XIB không phải là plists; đơn giản bằng cách là XML không ngụ ý rằng một cái gì đó có thể được hợp nhất. Một trong những lý do hợp nhất không hoạt động là vì biểu đồ đối tượng được biểu diễn bởi một ngòi không hoàn toàn là phân cấp, có nghĩa là có thêm các mối quan hệ khác/hợp nhất không biết cách duy trì. –

4

XIB có thể được hợp nhất. Trong các trường hợp đơn giản (như thay đổi văn bản, thay đổi kích thước của phần tử), phiên bản XIB mới nhất có thể tồn tại thậm chí còn phức tạp hơn (Apple đã nâng cấp định dạng và ngày nay nó có thể đọc được một cách hợp lý và không sử dụng ID số được sử dụng để tạo Kết hợp các lỗi dễ bị lỗi.)

Vấn đề là FileMerge có cấu hình được mã hóa cứng để lọc các tệp XIB thông qua ibtool in đẹp và làm cho nó nói rằng chúng không hợp nhất được.

// chỉnh sửa: có vẻ như Apple đã thêm xác minh tính toàn vẹn của tệp thi hành, vì vậy giải pháp vá không hoạt động nữa. "Ngừng sử dụng FileMerge" là giải pháp ngay bây giờ.

Một số lời khuyên:

  • Enable "Nén khoảng trắng" trong FileMerge Preferences.

  • Khi sự khác biệt là tổng số tệp lộn xộn và XIB có vẻ hoàn toàn khác nhau, chúng có thể là các phiên bản khác nhau của định dạng. Chạy trên mỗi file XIB, trước khi sáp nhập (trên các tập tin nguyên sơ mà không đánh dấu cuộc xung đột nhập):

    ibtool --write foo.xib --upgrade foo.xib 
    

này sẽ chuyển đổi các file XIB lên phiên bản Xcode mới nhất, vì vậy cả hai sẽ có cấu trúc tương tự.

2

tệp .xib là văn bản - chúng nên hoạt động, đặc biệt là các tệp hiện đại giống như tệp bảng phân cảnh. FileMerge, tuy nhiên, có trong bộ lọc của nó sở thích một phần cho các tập tin xib - nó so sánh sản lượng xử lý chứ không phải là các tập tin ban đầu. Điều này ngăn không cho hợp nhất được lưu.

Chỉ cần xóa mục nhập "xib" trong các tùy chọn về mặt lý thuyết phải làm việc - nhưng bất cứ khi nào tôi cố xóa dòng bộ lọc đó, dường như nó quay lại khi tôi khởi chạy lại FileMerge. Vì vậy, cách tiếp cận đó dường như không hoạt động.

Điều gì có vẻ hiệu quả là chỉ cần thay đổi lệnh lọc trong cột thứ hai thành cat (tức là xóa lệnh "ibtool" và đối số của nó và thay thế bằng "con mèo", sẽ tạo ra một bản sao thẳng tệp gốc) - rồi chọn hiển thị "Gốc" thay vì "Đã lọc" trong cột thứ ba. Tại thời điểm đó, FileMerge (không có bẻ khóa nhị phân) có vẻ tốt khi lưu các tệp .xib đã hợp nhất.

Điều này sẽ không hoạt động với các tệp .nib nhị phân, nhưng những tệp này không còn được chỉnh sửa trực tiếp, do đó không phải là vấn đề lớn trong quá trình hợp nhất.

+0

Trong khi điều này đã làm việc để sáp nhập, nó kỳ quặc bằng cách nào đó gây ra Xcode để không xây dựng dự án của tôi. Tôi đã phải hoàn nguyên cài đặt bộ lọc FileMerge mới cho xib, sau đó Xcode sẽ xây dựng dự án thành công. – duncanc4

+0

Phiên bản Xcode nào? Tôi chưa thấy vấn đề đó (Xcode 7.3 và Xcode 8.3.3). Hành vi đó dường như hoàn toàn kỳ quái. Quá trình xây dựng không nên thường sử dụng các công cụ FileMerge, trừ khi có các kịch bản xây dựng tùy chỉnh (hoặc xây dựng các quy tắc) mà bằng cách nào đó làm. –

+0

Điều này là với Xcode 8.3.3. – duncanc4

Các vấn đề liên quan