본문 바로가기
github, git

.xcodeproj, .xcdatamodel git merge conflict 해결하기

by vapor3965 2021. 9. 15.

목차

     

    목차

       

      우선 git에서 merge하는 상황과,

      충돌이 발생하는 상황,

      그다음에 .xcodeproj 충돌 해결방법.

      .xcdatamodel 충돌 해결방법을 설명한다. 

       


       

      우선 충돌이 일어나지 않는 상황

      메인 브렌치에서 

      A,B라는 사람이 각각 브랜치를 로컬에서 만들고 서로 계속 커밋하다가, 

      A가 먼저 풀리퀘하면 메인 브렌치와 별다른 충돌없이 merge될 것 이다. 

      이때 fast-forward 로 메인 브렌치에서 커밋만 추가했기 때문에 별다른 특이점이 없다.

      ( 검은색 줄은 아무런 이벤트가 없고 그대로 가져온 상태를 의미 ) 


      충돌이 일어날 수도 있고 아닐 수도 있는 상황

      위의 상황을 그대로 진행해보면, B는 언젠간 작업을 완료할 것이다. 

      완료했다라고 가정하고, 자신의 작업물을 풀리퀘할 것이다. 

      여기서 괜찮은 사람이라면 우선 먼저 자신의 로컬에서 테스트를 해봐야겠다. 

      현재 메인 브렌치는 A가 우선 머지한 상태이다. 

      그러므로, A가 머지한 메인 브렌치를 로컬에서 자신이 작업한 브랜치와 머지를 해본다 ( 가급적이면 자신의 브렌치를 하나 더 따서 하는걸 추천.. 혹시 모르니까! ) 

       

      이때, 충돌이 발생할 수도 있고 아닐 수도 있다.

      우선 일어날 수도 있는 이유는, 다음과 같다. 

      깃은 커밋을 기준으로 판단을 하는데 메인 브렌치에서 서로 브렌치를 만들면서 서로 다른 커밋을 함으로써 이를 분별할 수 없게 된다.

       

      그러므로 A,B각각 서로 공통적인 부분을 건드린 경우에 이를 판단할 수가 없게된다. 

      이러한 경우를 3-way  merge라고 한다. 

      서로 공통적인 부분이 전혀 없다면 문제없이 머지가 될수도 있다. ( 아닐 수도 있다. 그건 아래에서 다룰 예정 ) 

       

       

      이때, 만약 conflict가 났다면,

      깃은 자동적으로 코드에 분간할 수 없는 경우들을 아래와 같이 구별해준다. 

      <<<<<<<HEAD

      B가 가지고 있던 코드들 

      =======

      main branch가 가지고 있던 코드들 

      >>>>>>> main branch 

       

      merge conflict가 났지만, 전 모르겠으니, 개발자님이 직접 고쳐보세요~! 라고 알려주는 것과 비슷하다. 

       

       


      .xcodeproj 충돌 해결법 

      위에서 나왔듯이 충돌이 난 경우에 코드들을 비교해가면서 삭제해주면 된다. 

      하지만, xcode프로젝트 파일은 다르다 

      xcode프로젝트 자제가 안열리는 경우가 있다.

       

      일단 머지를 해보면 아래와 같이 메시지가 뜬다.

      CONFLICT (content): Merge conflict in EasyToDoList.xcodeproj/project.pbxproj

      Automatic merge failed; fix conflicts and then commit the result

       

      ( .pbxproj파일에 충돌이 발생했고, 알아서 수정하고 커밋하라는 메세지가 보인다. )

      그래도 처음에는 몹시 당황스럽다. 

       

      그러면서 프로젝트를 클릭해도 열리지가 않는다.

       

       

      해결법은 위에서처럼 직접 충돌난 부분을 찾아서 해결한다. 

      위처럼 클릭하면 아래와 같이 .pbxproj 파일을 볼 수 있는데, 

      이를 열어서 보면 코드로 구성되어있다. 

      .pbxproj는  프로젝트를 구성하는 파일, 폴더, 프레임워크 등을 관리하는 중요한 책임을 가지고, 이를 코드로 볼 수 있다. 

      여기서도 보면 <<<< ===== >>>> 문자들을 볼 수가 있다. 그러므로 잘 판별하여 수정하면 잘 열린다. 

      ( 아무래도 이러한 문자들은 .pbxproj가 해석? 할 수 없으니 애초에 열리지도 않은가보다 ) 

       

      ( 예전에는 위와 같이 해결하기 전에는 .gitattributes를 이용하여 

      merge=union을 이용했었는데 만능은 아니였다 ) 


      .xcdatamodel 충돌 해결법 

      작업하던 브랜치에서 coredata model에 entity를 추가했는데 이때문에 열리지 않는 듯 하다. 

       

      core data model도 StartTag: invalid element name 이라면서 아예 열리지도 않는데, 

      위와 xcodeproj 처럼 생각해볼 수 있다.

      코드로 된 파일을 찾아서 열어서 충돌코드들을 해결하는 것이다. 

       

      xcdatamodel 오른쪽 버튼을 눌러보면 show in Finder를 클릭하면, 

       

      저장된 곳을 볼 수가 있고, 

      마찬가지로 패키지로 확인해보면

      콘텐츠라는 파일이 존재한다. 

       

      이를 열어보면 마찬가지로 HEAD, ===== 코드들을 볼 수 있다. 

      StartTag: invalid element name 을 다시 보면, 3줄에 <<< HEAD가 있으므로 이는 시작 Tag의 이름이 맞지않다는 것으로 알 수가 있다. 

       

       

      고쳤는데 이렇게 또 안뜨는 경우도 있는데, 

      Opening and ending tag mismatch entity line 3 and model 

      말 그대로 Entity시작 부분은 <entity 로 시작해야하고, 

      Entity의 끝나는 부분은 </entity>로 끝나야한다. 

       

      'github, git' 카테고리의 다른 글

      깃헙에 글 양식( template) 추가하기  (0) 2021.08.24

      댓글