Git을 이용한 협업 진행 과정에서 자주 발생하는 Conflict 중 많은 비중을 차지하는 것이 Xcode 프로젝트 파일 관련 충돌이다.
각기 다른 branch에서 작업한 내용을 상위 브랜치에 merge할 경우 특별한 설정을 하지 않으면
.pbxproj 파일이 같이 merge된다.
.pbxproj 파일은 Build Setting(실제 프로젝트의 설정) 을 담은 파일이다. 프로젝트 내부에서 생성된 파일들을 파일 유형에 따라 reference를 저장하고 있다. conflict는 파일에 대한 reference가 없을 때 일어난다.
Pro Git Book 에서는 .pbxproj 파일을 바이너리 파일처럼 취급하는 것이 옳다고 한다.
프로젝트 최상위 디렉토리(.README.md가 있는 디렉토리)에서 .gitattributes 파일을 생성하여 내용을 작성하고 설정해 주면 된다.
$ vi .gitattributes
$ i ( text 입력 모드 진입 )
$ *.pbxproj binary merge=union
$ esc
$ :wq // 저장하고 종료
또는
$ echo "*.pbxproj binary merge=union" >> .gitattributes
$ git add .
$ git commit -m "*.pbxproj 파일 충돌 해결 설정"
$ git push origin main
만약 이미 원격 저장소에 .pbxproj 파일을 push 한 상황이라면
어떻게 해야 할까?
$ git rm <경로/*.pbxproj>
위 명령어를 터미널에서 실행함으로써 원격 저장소에 있는 파일을 삭제할 수 있다. 하지만 로컬 저장소에서도 해당 파일이 함께 삭제될 것이다.
$ git rm --cached <경로/*.pbxproj>
위 명령어를 사용한다면 원격 저장소의 파일만 삭제할 수 있다.