Saya telah mengerjakan aplikasi iPhone secara penuh sejak peluncuran SDK, sebagian besar waktu itu dihabiskan untuk bekerja dalam tim dengan banyak pengembang.
Yang benar adalah bahwa jauh lebih berbahaya untuk melarang penggabungan file .pbxproj itu daripada membantu. Seperti yang Anda katakan, ketika Anda menambahkan file kecuali orang lain mendapatkan file itu, mereka juga harus menambahkannya ke proyek mereka - dalam aplikasi dengan ukuran berapa pun, itu menyebalkan dan itu juga menghilangkan manfaat besar dari kontrol kode sumber di dalam diri Anda. tidak dapat benar-benar kembali ke status proyek sebelumnya yang lengkap hanya melalui git.
File .pbxproj hanyalah daftar properti (mirip dengan XML). Dari pengalaman, HANYA konflik penggabungan yang pernah Anda dapatkan adalah jika dua orang menambahkan file pada saat yang bersamaan. Solusi dalam 99% kasus konflik penggabungan adalah mempertahankan kedua sisi penggabungan, yang untuk git setidaknya hanya melibatkan penghapusan baris >>>>, <<<<, dan ====. Sebenarnya ini sangat umum sehingga saya telah membuat skrip shell sederhana untuk memperbaiki file .pbxproj dalam status gabungan dari git, saya menjalankan ini dari dalam direktori proyek (di tingkat Kelas):
#!/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
Kasus terburuk jika gagal (Anda meminta XCode untuk memuat proyek dan gagal memuat), Anda cukup menghapus file .pbxproj, memeriksa master dari git, dan menambahkan kembali file Anda. Tapi saya tidak pernah mengalami hal itu selama berbulan-bulan menggunakan skrip ini, lagi-lagi bekerja penuh waktu pada aplikasi iPhone dengan beberapa pengembang lain.
Opsi lain (ditunjukkan dalam komentar di bawah) yang dapat Anda coba gunakan sebagai pengganti skrip, adalah menambahkan baris ini ke file .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Kemudian git akan selalu mengambil kedua sisi gabungan untuk file .pbxproject, memiliki efek yang sama seperti skrip yang saya sediakan hanya tanpa pekerjaan tambahan.
Terakhir, ini file .gitignore lengkap saya, menunjukkan apa yang saya lakukan untuk mengabaikannya karena ada beberapa hal yang tidak Anda inginkan - dalam kasus saya benar-benar hanya sisa-sisa emacs dan seluruh direktori build:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile