[Git] Xcode 프로젝트 파일(.pbxproj) merge(머지) 시 Conflict(충돌) 문제 해결

Youngseok-O·2024년 5월 2일
0

Git

목록 보기
1/1

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

.gitattributes 파일이 생성되면 다음 명령어로 파일을 추가한다.

$ git add .
$ git commit -m "*.pbxproj 파일 충돌 해결 설정"
$ git push origin main

만약 이미 원격 저장소에 .pbxproj 파일을 push 한 상황이라면
어떻게 해야 할까?

작업 디렉토리에서 .pbxproj 파일을 삭제하고 다시 push 해주었지만 원격 저장소에서는 사라지지 않는 현상을 마주할 것이다.

$ git rm <경로/*.pbxproj>

위 명령어를 터미널에서 실행함으로써 원격 저장소에 있는 파일을 삭제할 수 있다. 하지만 로컬 저장소에서도 해당 파일이 함께 삭제될 것이다.

로컬 저장소의 파일은 남겨두고 원격 저장소의 파일만 삭제하고 싶다면 ?

$ git rm --cached <경로/*.pbxproj>

위 명령어를 사용한다면 원격 저장소의 파일만 삭제할 수 있다.

profile
Computer Engineering, Swift, iOS Developer

0개의 댓글