저는 SDK 출시 이후로 iPhone 애플리케이션을 풀 타임으로 작업 해 왔으며 대부분의 시간은 여러 개발자가있는 팀에서 작업했습니다.
사실은 .pbxproj 파일의 병합을 허용하지 않는 것이 도움이되는 것보다 더 해롭다는 것입니다. 당신이 말했듯이, 다른 사람들이 그 파일을 얻지 않는 한 파일을 추가 할 때, 그들은 또한 그들의 프로젝트에 추가해야합니다. 어떤 크기의 응용 프로그램에서든 짜증이 나고 소스 코드 제어의 큰 이점을 빼앗 깁니다. 실제로 git을 통해서는 완전한 이전 프로젝트 상태로 되돌릴 수 없습니다.
.pbxproj 파일은 XML과 유사한 속성 목록입니다. 경험상, 두 사람이 동시에 파일을 추가 한 경우에만 발생했던 병합 충돌이 발생했습니다. 병합 충돌 사례의 99 %에 대한 해결책은 병합의 양쪽을 유지하는 것입니다. git의 경우 최소한 >>>>, <<<< 및 ==== 행을 제거하는 것이 포함됩니다. 사실 이것은 매우 일반적이어서 git의 병합 상태에서 .pbxproj 파일을 수정하는 간단한 셸 스크립트를 만들었으므로 프로젝트 디렉터리 (Classes 수준에서) 내에서 실행합니다.
#!/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
실패하는 최악의 경우 (XCode에 프로젝트로드를 요청했지만로드에 실패 함) .pbxproj 파일을 삭제하고 git에서 마스터를 확인한 다음 파일을 다시 추가하면됩니다. 하지만이 스크립트를 사용하여 여러 달 동안 이런 일이 발생하지 않았으며, 다른 여러 개발자와 함께 iPhone 응용 프로그램에서 풀 타임으로 작업했습니다.
스크립트 대신 사용할 수있는 또 다른 옵션 (아래 주석에서 지적)은이 줄을 .gitattributes 파일에 추가하는 것입니다.
*.pbxproj text -crlf -diff -merge=union
그런 다음 git은 .pbxproject 파일에 대한 병합의 양면을 항상 취하여 추가 작업없이 만 제공 한 스크립트와 동일한 효과를 갖습니다.
마지막으로 내 완전한 .gitignore 파일은 원하지 않는 몇 가지 사항이 있으므로 무시하도록 설정 한 내용을 보여줍니다. 제 경우에는 실제로 emacs 잔재와 전체 빌드 디렉토리 만 있습니다.
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile