2017-02-05 10 views
0

Xcode 8.2.1의 로컬 리포지토리 만 사용하고 있습니다. 그것은 1 인 쇼이고, 나는 코드 변경을하는 유일한 사람입니다.Xcode : GIT 서브 브랜치에 파일을 추가했습니다. 이제 "Tree Conflict"를 병합하려고합니다.

master 
    branch1 
    ... 
    branch14 
      branch14.1 
      ... 
      branch 14.13 //added lots of new code/classes 
        branch 14.13.NewCombatReports //refactor 1 class into 2 

가 14.13에서 내가 엑스 코드의 "새 파일"옵션을 사용하여 새로운 클래스를 만들어 꽤 몇 가지 새로운 클래스를 추가 : 다음과 같이 몇 년 동안, 나는 GIT에서 하위 가지의 시리즈를 만들었습니다. 일단 기능이 생기면 14.13.NewCombatReports 하위 브랜치를 생성하여 큰 클래스 중 하나를 리팩터링하여 (코드의 큰 덩어리를 자체 클래스, 새로운 클래스, BattleManager.m/h로 분리).

내가 만족할 때 변경 사항을 적용한 다음 상위 분기로 병합을 시도했습니다.

하나 이상의 트리가 충돌하여 작업을 수행 할 수 없습니다.

On branch master.DevMain.14.13.newCombatReports 
Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

     ../CloudKitHelperClass (xxxxxxxx's conflicted copy 2016-11-18).m 
     ../yyyyyy.xcodeproj/project.xcworkspace/xcuserdata/thunk.xcuserdatad/.gitignore 
     ../yyyyyy.xcodeproj/project.xcworkspace/xcuserdata/thunk.xcuserdatad/UserInterfaceState (xxxxxxxx's conflicted copy 2016-11-18).xcuserstate 
     ../yyyyyy.xcodeproj/xcuserdata/thunk.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist 

nothing added to commit but untracked files present (use "git add" to track) 

없음 : 파일 BattleManagerClass.h 및 BattleManagerClass.m 비슷한 SO 질문의 조언에 따라 트리 충돌

있었다, 나는 반환 BattleManager가있는 * 같은 디렉토리에 git status을 실행 그 중 BattleManager 클래스와 관련된 것 같습니다. GIT에서 내가하고있는 것을 실제로 이해하지 않고 주위를 돌아 다니며 xcode 프로젝트에서 클래스를 제거하고 BattleManager 파일을 ~/tmp로 옮겼습니다. 나는 변경 사항을 적용한 다음 14.13의 나머지 변경 사항을 성공적으로 병합했습니다 .NewCombatReports는 14.13으로 다시 변경되었습니다. 이 시점에서 새로운 BattleManager 클래스를 다시 14.13에 추가하고 다시 빌드했습니다. 모든 것이 잘되었거나 그렇게 생각했습니다.

나중에 14.13을 14 개로 병합하려고하면 14.13 절에 추가 한 모든 단일 클래스 파일에 대해 불평하는 트리 충돌이 발생합니다.

그래서 근본적으로 잘못된 일을 한 것 같습니다. GIT는 순수한 새 파일을 포함하는 분기를 병합하려고 할 때 좋아하지 않습니다. 나는 아주 잘 GIT의 동작을 알지 못하고 이해하지 않는다 :

  1. 은 무엇 "트리 충돌"오류가 로컬 저장소의 맥락에서 나에게 말해하려고? 현재 개정판이 상충되는 부분을 이해하지 못합니다.
  2. 새 파일을 포함하는이 분기를 위쪽으로 병합 할 수 있도록 어떻게 수정해야합니까?

이 질문은 매우 유사한 것 같습니다 Xcode merge branch,remind tree conflict when add some new file. 이 주석은 The operation could not be performed because "PROJECTNAME" has one or more tree conflicts에 링크되어 있으며 로컬 버전과 서버 버전간에 디렉토리 구조를 조정하려고합니다. 내가 서버를 다루지 않기 때문에, 나는 그 충고를 적용하는 방법을 이해하지 못한다.

+0

주의는 downvote를 설명하기 위해? – Thunk

답변

1

나는 xcode가 git 작업을 시도하면서 비슷한 이상한 실패를 보았습니다.

그냥 xcode를 종료하고 재부팅하면 프로젝트가 닫히고 일부 문제가 해결되었습니다.

gui git 도구 중 하나를 사용하면 때로는 도움이됩니다. 몇 가지 옵션이 있지만 gitbox를 사용하며 앱 스토어에서 사용할 수 있습니다. 병합을 강제 수행하는 옵션이있어 문제를 해결할 수 있습니다.

+0

흥미 롭습니다. 내가 재부팅하고 gitbox를 시작했는데 커밋이 모두 적당 해 보였습니다. xcode를 다시 시작하면 병합이 성공했습니다. – Thunk

+0

향후 방문객의 경우 : 하위 부서에 새 파일을 추가 할 때마다 Xcode를 닫고 다시 시작할 때까지 전술 한 오류가 발생하는 것으로 보입니다. 그럼 모두 잘되고 나는 다시 부모로 병합 할 수 있습니다. – Thunk