Tôi đã làm việc trên các ứng dụng iPhone toàn thời gian kể từ khi ra mắt SDK, phần lớn thời gian đó dành cho việc làm việc theo nhóm với nhiều nhà phát triển.
Sự thật là việc không cho phép hợp nhất tệp .pbxproj đó có hại hơn là hữu ích. Như bạn nói, khi bạn thêm một tệp trừ khi người khác lấy được tệp đó, họ cũng phải thêm nó vào dự án của họ - trong một ứng dụng ở bất kỳ kích thước nào, điều đó thật tệ và nó cũng lấy đi lợi ích to lớn của việc kiểm soát mã nguồn trong đó bạn. không thể thực sự hoàn nguyên về trạng thái dự án hoàn chỉnh trước đó chỉ thông qua git.
Tệp .pbxproj chỉ đơn giản là một danh sách thuộc tính (tương tự như XML). Theo kinh nghiệm, chỉ về xung đột hợp nhất DUY NHẤT mà bạn từng gặp phải 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 hợp nhất, điều này đối với git ít nhất chỉ đơn giản là xóa bất kỳ dòng >>>>, <<<< và ==== nào. Trên thực tế, điều này rất phổ biến nên tôi đã tạo một tập lệnh shell đơn giản để sửa tệp .pbxproj ở trạng thái hợp nhất từ git, tôi chạy điều này từ 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
Trường hợp xấu nhất 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 tổng thể từ git và thêm lại các tệp của bạn. Nhưng tôi chưa bao giờ có điều đó xảy ra trong nhiều tháng sử dụng với tập lệnh 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 (được chỉ ra trong nhận xét bên dưới) mà bạn có thể thử sử dụng thay cho tập lệnh, là thêm dòng này vào tệp .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Sau đó, git sẽ luôn lấy cả hai mặt của một hợp nhất cho các tệp .pbxproject, có tác dụng giống như tập lệnh mà tôi đã cung cấp chỉ mà không cần thực hiện thêm bất kỳ thao tác nào.
Cuối cùng, đây là tệp .gitignore hoàn chỉnh của tôi, hiển thị những gì tôi đã đặt nó để bỏ qua vì có một số thứ bạn không muốn - trong trường hợp của tôi thực sự chỉ là tàn dư của emacs và toàn bộ thư mục xây dựng:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile