.pbxproj 충돌
오랜만에 .pbxproj 충돌을 오랜만에 경험해서,
협업 중 자주 발생하는 이슈만큼 구조와 충돌 원인을 확실히 이해하고 정리하고자 한다.
.pbxproj
Xcode의 프로젝트 내부 설정하는 파일이다.
프로젝트의 파일 구조, 빌드 설정과 같은 것을 관리한다.
여러 명이 동시에 파일 작업하면
해당 파일은 순서 기반 구조라 자주 충돌이 일어난다.
<<<<<<< HEAD
(현재 브랜치 코드)
=======
(다른 브랜치에서 온 코드 — 보통 머지 대상)
>>>>>>> develop
그래서 Git이 자동 머지를 못 하고 충돌표시가 생성된다.
conflict이 나고 제대로 해결되지 못하면,
project.pbxproj 파일이 깨져서 프로젝트가 열리지 않는다.
project.pbxproj 를 열기 위해서는
1. 해당 Xcode프로젝트 파일에 우클릭하여 패키지 내용 보기를 선택하면
2. 해당 파일을 확인할 수 있다.
<<<<<<< HEAD
(현재 브랜치 코드)
=======
(다른 브랜치에서 온 코드 — 보통 머지 대상)
>>>>>>> develop
이제 충돌된 부분을 해결을 하면 된다.
나는 xcode의 미니맵 기능을 활용해서 변경된 부분만 집중해서 보는 편이다.
미니맵 단축키는 cmd + shift + ctrl + M.
여기서 더 주의깊게 봐야하는 건,
보통 group 중복, 중괄호 누락, ID 겹침에 주의해서 확인해야 한다.
ABCD1234567890AB00000001 /* View */ = {
isa = PBXGroup;
children = (
ABCD1234567890AB00000002 /* A뷰.swift */,
ABCD1234567890AB00000003 /* B뷰.swift */,
ABCD1234567890AB00000004 /* C뷰.swift */,
EFGH9876543210EF00000001 /* View */ = {
isa = PBXGroup;
children = (
EFGH9876543210EF00000002 /* D뷰.swift */,
EFGH9876543210EF00000003 /* E뷰.swift */,
);
path = View;
sourceTree = "<group>";
};
예를 들어서 위와 같은 코드처럼 말이다.
각 디렉토리가 구분되어야 하는데,
괄호와 가리키는 디렉토리가 누락되어 있다.
이처럼 해당 충돌을 주의해서 해결해야 한다.
혹시나 충돌 해결 다 했다고 생각했는데,
프로젝트가 열리지 않는다면
위와 같은 예시로 눈에 띄지 않는 작은 실수가 남아 있을 가능성이 크다.
그리고 이미 커밋까지 진행한 상황이라면
변경 전 상태와 비교하기가 어려워지기 때문에,
이럴 땐 과감하게
git merge --abort 명령어 를 사용하자
머지 자체를 취소하고 처음부터 다시 머지를 하여
충돌해결을 하는 것이 지름길이라고 생각한다.