CODEDRAGON ㆍDevelopment/Git, PM
충돌 문제 해결 - CONFLICT : 협업하는 두 개발자 동일한 파일의 동일한 라인 수정하여 충돌 발생 시키기
· 협업시 가장 빈번히 발생하고 가장 골치 아픈 충돌문제를 해결하는 방법을 확인하겠습니다. · 개발자들이 각자 같은 코드의 같은 행을 수정하면 충돌이 일어나고 이 때 마지막에 push하는 사람이 그 충돌을 해결해야 합니다. |
A - index.html 파일에 같은 코드의 같은 행 수정하기
<h1> 태그를 <h3>로 변경합니다.
B- index.html 파일에 같은 코드의 같은 행 수정하기
Collaboration 문구를 <strong> 태그로 감사 줍니다.
<h1><strong>Collaboration</strong> Work</h1>
A - 새로운 버전 생성하기
git commit -am 'modify <h1> -> <h3>'
git log
B- 새로운 버전 생성하기
git commit -am 'add <strong>tag'
git log
A - 원격 저장소에 push
git pull
git push
B- 원격 저장소에 push
developerB가 간만의 차이로 늦게 'git pull'를 하게 되면 B에서 충돌메시지가 발생합니다.
git pull
CONFLICT라는 메시지가 출력됩니다.
codedragon@CODEMASTER MINGW64 /c/CodeLab/gitLab/coworkB (master) $ git pull remote: Counting objects: 3, done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/codeconn/worktogether 5ec5b78..2fa313a master -> origin/master Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. codedragon@CODEMASTER MINGW64 /c/CodeLab/gitLab/coworkB (master|MERGING) $ |
'git status' 명령으로 어디에 충돌이 났는지 확인할 수 있습니다.
git status
'git status'를 확인해보면 "Unmerged paths:"로 "both modified: index.html" 메시지로
'index.html'파일이 충돌이 되었다는 것을 확인할 수 있습니다.
codedragon@CODEMASTER MINGW64 /c/CodeLab/gitLab/coworkB (master|MERGING) $ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: index.html no changes added to commit (use "git add" and/or "git commit -a") codedragon@CODEMASTER MINGW64 /c/CodeLab/gitLab/coworkB (master|MERGING) $ |
B - 충돌 해결하기
충돌난 파일을 오픈합니다.
에디터로 해당파일을 열어보면 어떤 부분에서 충돌이 났는지 확인할 수 있습니다.
<<<<<<< HEAD라고 표시된 부분은 developerB가 작성한 코드 이고
=======밑에 표시된 부분은 원격저장소에서 가져온 코드입니다.
developerB가 보기에 변경된 부분 모두 필요하다고 판단되면
모두 적용하여 충돌부분을 적절하게 수정을 합니다. 그리고 충돌이 일어났다고 표시한 충돌기호를 모두 삭제한 후 파일을 저장합니다.
이 때 해당 충돌을 해결하기 위해 이 부분을 수정한 개발자와 왜 수정을 했는지 등 충분히 협의를 한 후 해당 충돌부분을 적절히 수정합니다.
충돌이 해결되었음을 git에게 알려주기
충돌이 해결되었음을 git에게 알려주기위해 다시 'git add'명령을 수행하면 됩니다.
git add 'index.html'
git status
index.html이 초록색으로 수정되었다라고 표시됩니다.
codedragon@CODEMASTER MINGW64 /c/CodeLab/gitLab/coworkB (master|MERGING) $ git status On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) All conflicts fixed but you are still merging. (use "git commit" to conclude merge) Changes to be committed: modified: index.html codedragon@CODEMASTER MINGW64 /c/CodeLab/gitLab/coworkB (master|MERGING) $ |
B-충돌 해결한 새로운 버전 생성하기
'git commit -m' 커밋과 동시에 메시지를 작성해도 되지만 'git commit' 명령으로 충돌 해결에 대한 메시지도 함께 커밋하는 것이 좋습니다.
git commit
'git commit'을 실행하면 git은 충돌이 난 상황을 알고 있기 때문에 해당 내용을 포함한 commit메시지를 자동으로 작성해 줍니다.
여기에 여러분이 추가적인 메시지를 작성한 후 저장하면 commit이 이루어집니다.
이 때 키보드에서 "i" 입력하여 편집모드로 바꾼 후 해결된 정보를 상세히 적어줍니다.
i
conflict solved (detailed info)
:wq
저장하고 바줘나오면 자동으로 commit이 됩니다.
git log
충돌을 해결 했으므로 이제 push를 할 수 있는 상태가 되었으므로 원격저장소에 변경사항을 push합니다.
git push origin master
만약 충돌을 해결하는 데 많은 시간이 걸렸다면 바로 git push를 수행하는 것이 아니라 'git pull'후 'git push'를 수행합니다.
원격저장소 확인
A - 원격저장소의 변경사항을 로컬저장소로 가져오기
git pull
git log
cat index.html
B - index.html을 오픈합니다.
cat index.html
developerA와 developerB 모두 충돌이 해결되었으므로 모두 동일한 내용의 파일을 확인할 수 있습니다.
developerA |
|
developerB |
|
실 개발환경에서는 보다 복잡하고 다양한 충돌 문제가 발생되며 충돌 해결을 많이 시간이 소요될 수 도 있습니다.
충돌을 막는 팁(git으로 협업시 팁)
변경사항이 발생하여 새로운 버전이 생성되면 즉시 push를 하여 충돌을 막아주는 것이 가장 좋습니다.
http://codedragon.tistory.com/5592
'Development > Git, PM' 카테고리의 다른 글
github 서비스 상태 확인 (0) | 2018.07.21 |
---|---|
Github interface(Github 인터페이스) : Code - README.md, commits, branches, contributors (0) | 2018.07.02 |
SourceTree(소스트리) - 한글에서 영어로 언어설정 바꾸기 (0) | 2018.06.21 |
프로젝트 통째로 Github에 올리기 (0) | 2018.06.14 |
버전관리 사례 - Wiki, 위키피디아 (0) | 2018.06.01 |