Saya telah menjadi pengembang iphone untuk sementara waktu, dan saya baru-baru ini memasukkan git dalam alur kerja saya. Saya telah menggunakan pengaturan git yang ditemukan di http://shanesbrain.net/2008/7/9/using-xcode-with-git untuk alur kerja saya sejauh ini.
Pengaturan tersebut memberitahu git untuk mengecualikan * .pbxproj dari penggabungan? Apakah ada alasan nyata untuk melakukan ini? Misalnya, ketika saya menambahkan file ke proyek dan mendorong ke asal, rekan pengembang saya tidak akan menambahkan file itu ke proyek xcode mereka saat mereka menarik. Kemudian jika salah satu dari mereka membangun rilis, file ini mungkin tidak disertakan. Bukankah sebaiknya saya membiarkan git menangani penggabungan untuk file proyek? Mengapa atau mengapa file ini tidak harus digabungkan dan bagaimana menangani situasi dengan benar ketika file ditambahkan ke proyek?
sumber
Jawaban:
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):
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:
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:
sumber
union
switch:*.pbxproj text/plain -crlf -diff -merge union
.Ini berfungsi untuk saya di Xcode 4.6 dan Git 1.7.5.
Tambahkan dan komit file .gitattributes dengan ini:
Saya telah menguji ini dengan anggota tim lain dan bekerja dengan baik.
Diambil dari: http://robots.thoughtbot.com/post/33796217972/xcode-and-git-bridging-the-gap
sumber
Terus terang, jawaban yang ada saat ini menyesatkan.
Jika Anda tidak pernah menghapus atau mengganti nama file, maka menggunakan
merge=union
strategi, yang hanya menggabungkan perbedaan dalam komitmen yang berbeda secara langsung, adalah ide yang bagus.Namun, di dunia nyata, kami terkadang perlu menghapus atau mengganti nama file. Menggabungkan perbedaan tanpa modifikasi akan membuat banyak masalah dalam situasi ini, dan masalah ini biasanya mengarah ke masalah "Integritas Ruang Kerja - Tidak dapat memuat proyek", yang membuat Anda bahkan tidak dapat menjalankan proyek.
Solusi terbaik yang saya dapatkan sejauh ini:
1) Rancang proyek dengan baik dan tambahkan semua file yang diperlukan di awal, jadi Anda jarang perlu mengubah file
project.pbxproj
.2) Buat fitur Anda kecil. Jangan melakukan terlalu banyak hal di cabang.
3) Untuk alasan apa pun, jika Anda perlu mengubah struktur file dan mengalami konflik
project.pbxproj
, gunakan editor teks favorit Anda untuk menyelesaikannya secara manual. Saat Anda membuat tugas Anda kecil, konflik mungkin mudah diselesaikan.sumber
Jawaban singkatnya adalah meskipun Anda tidak menyertakan baris tersebut
.gitattributes
, Anda mungkin tidak dapat dengan mudah menggabungkan dua versi .pbxproj yang dimodifikasi. Lebih baik git memperlakukannya sebagai biner.Lihat di sini untuk detailnya: Git dan pbxproj
Pembaruan: Meskipun buku git masih setuju dengan jawaban ini, saya tidak lagi melakukannya. Saya mengontrol versi saya
.pbxproj
sama seperti file sumber non-biner lainnya.sumber
simplejson
atau lebih rapi dalam perjalanan ke indeks. Itu masih belum dijamin berhasil..pbxproj
File sebenarnya adalah file NeXT / Cocoa PList gaya lama, yang lebih lama, dan didefinisikan jauh lebih awal dari JSON, dan sekarang tidak digunakan lagi oleh Apple. (tetapi mereka masih menggunakannya di beberapa tempat) Penyebutan file di dalam buku salah sama sekali. Saya menghapus suara karena Anda menyebutkannya secara eksplisit.Saya memang membuat skrip Python yang dapat menangani konflik penggabungan dalam file Proyek XCode.
Jika Anda ingin mencobanya, Anda dapat memeriksanya di sini: https://github.com/simonwagner/mergepbx
Anda harus menginstalnya sebagai driver gabungan, sehingga akan dipanggil secara otomatis ketika Anda memiliki konflik penggabungan dalam file proyek Anda (README.md akan memberitahu Anda bagaimana melakukannya).
Ini harus bekerja jauh lebih baik daripada menggunakan
merge=union
sebagaimergepbx
memahami semantik file proyek Anda dan karena itu akan menyelesaikan konflik dengan benar.Namun proyek ini masih dalam tahap alfa, jangan berharap untuk memahami setiap file proyek yang ada.
sumber