DIRTY_WORKTREE 에러
*프로젝트 협업하는 팀원의 닉네임은 모자이크 처리했습니다.
이클립스와 GitHub를 통한 협업 프로젝트를 진행하다 보면 한 번씩 경험해 볼 수 있는 에러이다.
이클립스는 내가 수정한 혹은 업데이트한 파일들을 commit 하기 전, 상대의 commit을 먼저 pull 받고 진행해야 충돌을 최소한으로 줄일 수 있다. 충돌에는 여러가지 이유가 있지만 그중에서도 제일 빈번하게 일어나는 충돌은,
예를 들어 A와 B가 같은 파일(index.jsp)을 각자 수정 후 commit을 했다고 치자. 이때 협업자 C가 수정된 index.jsp를 받아오기 위해
pull 을 하였지만 여기서 문제가 발생한다.
github는 commit 된 두 파일 중 무엇을 선택해 C에게 Pull해 줘야 하는지 갈등을 겪게 된다.
해결 방법 첫번째
Git Repositories > 해당 협업 프로젝트 > Branches > Local> master 혹은 당사자의 브런치를 마우스로 우클릭 > Reset을 누른다.
Reset을 누르면 해당 그림과 같은 팝업이 뜬다. Hard를 선택 후 Finish 한다.
여기서 Reset은 해당 시점으로 돌아간다는 것을 의미한다.
충돌이 일어나기 전 혹은 문제가 발생하기 전 상태로 돌아갔다면, 상대방의 업데이트된 파일을 pull 받는다.
마지막으로 다시
Git Repositories > 해당 협업 프로젝트 > Branches >Remote Tracking에서 실패했던 pull list에 오른쪽 마우스를 클릭한 후
Merge를 클릭하면 해결된다.
해결방법 두번째
자세히 보면 DIRTY_WORKTREE에 경로가 보인다. 저 경로에 들어가 해당 파일을 삭제하고 다시 가지고 온다.
삭제 후 실패했던 pull을 다시 merge하면 된다.
Git Repositoires > 해당 협업 프로젝트 > Branches >Remote Tracking에서 실패했던 pull list에 오른쪽 마우스를 클릭 한 후
Merge를 클릭하면 된다.
해결방법 세번째
Package Explorer에서 진행 중인 프로젝트를 우클릭 > Team > show in History를 클릭한다.
그러면 콘솔 옆에 아래와 같이 History 창이 열린다.
History에 들어가면 현재 프로젝트에서 지금까지 성공한 commit 내역이 나온다.
이 중에서 돌아가고 싶은 시점을 우클릭한 후 >Reset > Hard를 클릭하면 그때의 시점으로 돌아간다.
그 후 충돌을 해결하고 다시 pull을 받으면 된다.
이렇게 history를 통해 Reset 하는 방법을 문제없이 사용하려면 평소 프로젝트에서 수정 혹은 업데이트 후 파일을 commit 할 때 commit message를 의미 있고 알아보기 쉽게 적어 놓아야한다.
개인적으로 DIRTY_WORKTREE 에러는 2번 > 3번 > 1번 순으로 에러를 해결한다. 두 번째가 제일 간단하고 성격과도 맞는 방법이기 때문이다. 앞으로도 많은 에러 해결 방법을 포스팅해보겠습니다~!
댓글