SDK lansmanından bu yana iPhone uygulamaları üzerinde tam zamanlı çalıştım, çoğu zaman birden fazla geliştiriciyle ekipler üzerinde çalışarak geçirdim.
Gerçek şu ki, bu .pbxproj dosyasının birleştirilmesine izin vermemek yararlı olduğundan çok daha zararlıdır. Dediğiniz gibi, başkaları o dosyayı almadıkça bir dosya eklediğinizde, onu projelerine de eklemeleri gerekir - her boyutta, berbat bir uygulamada ve aynı zamanda kaynak kod kontrolünün büyük bir faydasını ortadan kaldırır. git aracılığıyla tam bir önceki proje durumuna gerçekten geri dönemez.
.Pbxproj dosyası basitçe bir özellik listesidir (XML'e benzer). Deneyimlere göre, yaşadığınız YALNIZCA birleştirme çatışması, iki kişinin aynı anda dosya eklemiş olmasıydı. Birleştirme çakışması durumlarının% 99'undaki çözüm, birleştirmenin her iki tarafını da tutmaktır; bu, git için en azından herhangi bir >>>>, <<<< ve ==== satırının kaldırılmasını içerir. Aslında bu o kadar yaygın ki git'ten bir birleştirme durumunda bir .pbxproj dosyasını düzeltmek için basit bir kabuk komut dosyası oluşturdum, bunu proje dizininden çalıştırıyorum (Sınıflar düzeyinde):
#!/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
En kötü durum, başarısız olursa (XCode'dan projeyi yüklemesini istersiniz ve yüklenemezse), .pbxproj dosyasını silmeniz, git'ten ana kopyaya göz atmanız ve dosyalarınızı yeniden eklemeniz yeterlidir. Ancak bu komut dosyasını aylarca kullandığımda, yine iPhone uygulamalarında diğer birkaç geliştiriciyle tam zamanlı çalışarak bunu hiç yaşamadım.
Komut dosyası yerine kullanmayı deneyebileceğiniz başka bir seçenek (aşağıdaki yorumlarda belirtilmiştir), bu satırı bir .gitattributes dosyasına eklemektir:
*.pbxproj text -crlf -diff -merge=union
Sonra git her zaman .pbxproject dosyaları için bir birleştirmenin her iki tarafını da alır, bu da benim sağladığım komut dosyasıyla aynı etkiye sahiptir ve fazladan çalışma gerektirmez.
Son olarak, işte tam .gitignore dosyam, istemediğiniz birkaç şey olduğu için görmezden gelmek için ayarladığım şeyi gösteriyor - benim durumumda gerçekten sadece kalıntıları ve tüm yapı dizini emacs:
# xcode noise
build