Tôi đã làm việc trên các ứng dụng iPhone toàn thời gian kể từ khi khởi chạy SDK, phần lớn thời gian đó dành cho các nhóm có nhiều nhà phát triển.
Sự thật là có nhiều cách gây hại hơn để không cho phép hợp nhất tệp .pbxproj đó so với tệp hữu ích. Như bạn nói, khi bạn thêm tệp trừ khi người khác nhận được tệp đó, họ cũng phải thêm tệp đó vào dự án của họ - trong một ứng dụng có kích thước bất kỳ và điều đó cũng mang lại lợi ích to lớn cho việc kiểm soát mã nguồn không thể quay trở lại trạng thái dự án hoàn chỉnh trước đó chỉ qua git.
Tệp .pbxproj chỉ đơn giản là danh sách thuộc tính (tương tự như XML). Từ kinh nghiệm, chỉ về cuộc xung đột hợp nhất CHỈ mà bạn từng nhận được là nếu hai người đã thêm tệp cùng một lúc. Giải pháp trong 99% các trường hợp xung đột hợp nhất là giữ cả hai mặt của quá trình hợp nhất, cho git ít nhất đơn giản là xóa mọi >>>>, < < < < và ==== dòng. Trong thực tế này là rất phổ biến mà tôi đã tạo ra một kịch bản shell đơn giản để sửa chữa một tập tin .pbxproj trong trạng thái hợp nhất từ git, tôi chạy này từ bên trong thư mục dự án (ở cấp lớp):
#!/bin/sh
projectfile=`find -d . -name 'project.pbxproj'`
projectdir=`echo *.xcodeproj`
projectfile="${projectdir}/project.pbxproj"
tempfile="${projectdir}/project.pbxproj.out"
savefile="${projectdir}/project.pbxproj.mergesave"
cat $projectfile | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^>>>>>>> " > $tempfile
cp $projectfile $savefile
mv $tempfile $projectfile
xấu nhất trường hợp nếu nó không thành công (bạn yêu cầu XCode tải dự án và nó không tải được), bạn chỉ cần xóa tệp .pbxproj, kiểm tra chủ từ git và thêm lại tệp của bạn. Nhưng tôi đã không bao giờ có điều đó xảy ra trong nhiều tháng sử dụng với kịch bản này, một lần nữa làm việc toàn thời gian trên các ứng dụng iPhone với một số nhà phát triển khác.
Một tùy chọn khác (chỉ ra trong ý kiến dưới đây) mà bạn có thể thử sử dụng ở vị trí của kịch bản, là thêm dòng này vào một tập tin .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Sau đó git sẽ luôn lấy hai bên hợp nhất cho các tệp .pbxproject, có tác dụng tương tự như tập lệnh tôi chỉ cung cấp mà không cần thêm bất kỳ công việc nào.
Cuối cùng, đây là nội dung hoàn chỉnh của tôi.tập gitignore, cho thấy những gì tôi có nó thiết lập để bỏ qua vì có một vài điều bạn không muốn - trong trường hợp của tôi thực sự chỉ Emacs tàn dư và cả xây dựng thư mục:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile
Tôi không làm việc với XCode, nhưng nếu các tệp * .pbxproj là bất kỳ thứ gì như tệp * .csproj của Visual Studio (phần nào của danh sách tệp), cài đặt này có vẻ hơi ngu ngốc đối với tôi. Có vẻ như ai đó đã mệt mỏi vì xung đột hợp nhất khi hai người thêm tệp vào dự án và nghĩ giải pháp tốt nhất là vặn mọi thứ lên ... –
Vấn đề với XCode (không chắc chắn về Visual Studio) là tệp .pbxproj chỉ là con người có thể đọc được, do đó không có ý nghĩa để giải quyết xung đột bằng tay. – Tom
*.Các tệp pbxproj thực sự được cấu trúc khá tốt, bạn chỉ cần trải dài giữa phần cuối khối và phân đoạn bắt đầu. Niềm hạnh phúc tiết kiệm là tập tin có các ngắt dòng rất tốt nên rất khó để làm hỏng nó chỉ cần sửa đổi dòng và automerge thường hoạt động rất tốt. Nó cũng có nghĩa là các khối hợp nhất thường dễ hiểu - bạn có thể thấy một bên với một vài tập hợp các tệp được thêm vào, phần còn lại có các bộ tệp khác nhau được thêm vào. –