2009-10-11 16 views
27

Tôi đang xem ứng dụng Mac nguồn mở và họ đã đưa ra một số giá trị được đề xuất cho .gitignore. Họ là những gì tôi mong chờ ...Git và pbxproj

Tuy nhiên, họ cũng đề nghị một mục vào một tập tin .gitattributes:

*.pbxproj -crlf -diff -merge

tôi không phải là có kiến ​​thức nhất về git, vì vậy tôi đã tự hỏi - chính xác những lợi ích của việc thêm dòng này là gì? Điều gì làm đặc biệt? Tôi chỉ thấy điều này được đề xuất trong số này one project và nếu đó là thực tế bình thường, tôi có thể sẽ thấy nó ở nơi khác ngay bây giờ. Vì vậy, tôi đã tò mò về cách nó áp dụng cho các tập tin pbxproj cụ thể.

+0

Bài đăng http://stackoverflow.com/questions/2615378/how-to-use-git-properly-with-xcode khuyến khích hợp nhất các tệp '.pbxproj'. – Besi

Trả lời

25

Tệp pbxproj không thực sự hợp nhất với con người. Trong khi nó là văn bản ASCII đơn giản, nó là một dạng JSON. Về cơ bản bạn muốn coi nó như một tệp nhị phân.

Đây là những gì những lá cờ cá nhân làm:

-crlf: không sử dụng CRLF < => chuyển đổi cr

-diff: không diff file

-merge: không cố gắng sáp nhập các tập tin

Từ cuốn sách Pro Git Scott Chacon

Một số tệp trông giống như tệp văn bản nhưng cho tất cả các mục đích và mục đích phải là được coi là dữ liệu nhị phân. Ví dụ: Các dự án Xcode trên máy Mac chứa tệp kết thúc bằng .pbxproj, là về cơ bản là JSON (plain text định dạng dữ liệu javascript) tập dữ liệu được ghi ra đĩa bằng IDE ghi lại cài đặt xây dựng của bạn trên. Mặc dù đó là một tệp văn bản, vì đó là tất cả ASCII, bạn không muốn để xử lý nó vì nó là thực sự là một cơ sở dữ liệu nhẹ - bạn không thể hợp nhất nội dung nếu hai người thay đổi nó và khác biệt nói chung không phải là hữu ích. Tệp này có nghĩa là được máy tiêu thụ. Về bản chất, bạn muốn coi nó như một tệp nhị phân.

+0

'-crlf' không có" ký tự dấu gạch ngang dải "nhưng ** không ** (tùy chọn bị từ chối) sử dụng chuyển đổi crlf (crlf <-> cr) trên tệp này. –

+11

Trong kinh nghiệm của tôi (phải thừa nhận một chút), những thay đổi rất đơn giản (chẳng hạn như thêm tệp mới) thường có thể được hợp nhất trong tệp .pbxproj. Nếu bạn làm bất cứ điều gì phức tạp hơn, như có một chi nhánh thêm một tập tin, và một nhánh khác sắp xếp lại các nhóm nguồn của bạn, thì bạn thường sẽ nhận được tệp .pbxproj bị hỏng, nhưng đối với các công cụ đơn giản, nó thường có thể thực hiện được. Tôi chưa quyết định xem có nên xử lý các tệp .pbxproj dưới dạng nhị phân hay không. –

+1

Tôi đồng ý, tôi đã thành công khi hợp nhất các tệp .pbxproj bằng Perforce. Tôi đã rất cẩn thận và đã đi qua từng thay đổi một cách kỹ lưỡng. Phải mất thời gian nhưng chắc chắn là có thể thực hiện được. Cho đến nay tôi đã không kết thúc với một tập tin dự án tham nhũng. Nhưng tôi cũng biết những gì thay đổi tôi đã thực hiện, và tôi chỉ tích hợp theo một hướng (không tích hợp mọi thứ). – LearnCocos2D

6

Một sự khác biệt đôi khi hữu ích vào thời gian cam kết để kiểm tra những gì đã được thay đổi. Vì vậy, tôi thấy hữu ích khi giữ khả năng phân biệt nhưng chỉ ngăn chặn việc hợp nhất. Vì vậy, tôi sử dụng này trong tập tin .gitattributes tôi:

* .pbxproj -crlf -merge

Ngày lưu ý khác, có ai cố gắng sử dụng hợp nhất = công đoàn cho các tập tin pbxproj? Xem: Should I merge .pbxproj files with git using merge=union?

3

Tôi đã viết một tập lệnh python có tên xUnique để giải quyết vấn đề xung đột hợp nhất này.

Kịch bản này làm những việc sau đây:

  • thay thế tất cả 24 chars UUID dự án toàn độc đáo tiêu hóa 32 chars MD5, và loại bỏ bất kỳ UUIDs chưa sử dụng (thường là do kết hợp bất cẩn trước đó). Điều này sẽ ngăn các UUID trùng lặp vì các máy khác nhau/Xcode tạo các UUID khác nhau trong tệp này. Xcode không nhận ra nó và dự án có thể được mở ra. Trong quá trình này, hãy xóa tất cả các dòng không hợp lệ trong tệp dự án
  • sắp xếp tệp dự án. Tôi đã viết một python version của sort-Xcode-project-file from Webkit team với nhiều tính năng mới:
    • hỗ trợ sắp xếp PBXFileReferencePBXBuildFile phần
    • file remove nhân đôi/refs
    • tránh tạo tập tin mới ngay cả khi không thay đổi được thực hiện, điều này làm cho các cam kết ít hơn sau khi sử dụng kịch bản này

Thông tin chi tiết và cập nhật của xUnique, vui lòng tham khảo README