Pracowałem nad aplikacjami na iPhone'a w pełnym wymiarze czasu od momentu uruchomienia SDK, większość tego czasu spędziłem w zespołach z wieloma programistami.
Prawda jest taka, że znacznie bardziej szkodliwe jest uniemożliwienie scalenia tego pliku .pbxproj niż jest to pomocne. Jak mówisz, kiedy dodajesz plik, chyba że inne osoby go otrzymają, muszą również dodać go do swojego projektu - w aplikacji o dowolnym rozmiarze, to jest do bani, a także odbiera ogromną korzyść z kontroli kodu źródłowego, ponieważ ty nie może tak naprawdę powrócić do kompletnego wcześniejszego stanu projektu tylko przez git.
Plik .pbxproj to po prostu lista właściwości (podobna do XML). Z doświadczenia wynika, że prawie JEDYNYM konfliktem scalania, jaki kiedykolwiek otrzymałeś, jest sytuacja, gdy dwie osoby dodały pliki w tym samym czasie. Rozwiązaniem w 99% przypadków konfliktu scalania jest zachowanie obu stron scalania, co w przypadku gita przynajmniej polega na usunięciu wszelkich linii >>>>, <<<< i ====. W rzeczywistości jest to tak powszechne, że utworzyłem prosty skrypt powłoki, aby naprawić plik .pbxproj w stanie scalania z git, uruchamiam to z katalogu projektu (na poziomie klas):
#!/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
W najgorszym przypadku, jeśli to się nie powiedzie (prosisz XCode o załadowanie projektu i nie można go załadować), po prostu usuwasz plik .pbxproj, wyewidencjonowujesz master z git i ponownie dodaj swoje pliki. Ale nigdy nie zdarzyło mi się to przez wiele miesięcy używania tego skryptu, ponownie pracując w pełnym wymiarze godzin nad aplikacjami na iPhone'a z kilkoma innymi programistami.
Inną opcją (wskazaną w komentarzach poniżej), którą możesz spróbować zamiast skryptu, jest dodanie tej linii do pliku .gitattributes:
*.pbxproj text -crlf -diff -merge=union
Wtedy git zawsze będzie łączył obie strony dla plików .pbxproject, uzyskując taki sam efekt jak skrypt, który dostarczyłem, tylko bez dodatkowej pracy.
Na koniec, oto mój kompletny plik .gitignore, pokazujący, co mam ustawione do ignorowania, ponieważ jest kilka rzeczy, których nie chcesz - w moim przypadku tak naprawdę tylko pozostałości emacsa i cały katalog kompilacji:
# xcode noise
build