회사 근무 중 누군가 공개해둔 레파지토리를 협업해야할 일이 생겼다고 가정하자.
회사에서 공개된 Remote Repository가 있다.
A 주니어 개발자와 B 시니어 개발자가 둘이서 git을 통해 해당 레파지토리를 fork하여
한 쪽이 push하면 상대방의 Remote Repository를 검토하기 위해 pull을 하기로 하였다.
그런데 우리의 A 주니어 개발자 pull을 할 줄 몰라, 그저 사수에게 말할지 말지 눈치 보는 중이다......
진작에 이럴줄 알았으면, git 관리 기능에 대해 사용 좀 해볼 걸 후회를 하고 마는데,,,,,,
"실수를 쉽게 복구", "저장공간을 적게 차지" 등등 git의 장점들 때문에 개발 회사에선 선호하는 편이다.
git을 할 줄 안다는 것은 협업에서 편리하게 업무를 볼 수 있는 셈이다.
그럼 이번에 pull과 pull request, 충돌 상황에 대해 알아보자!!
우선 먼저 이미 상대방이 올려놓은 레파지토리에 fork
를 하자
위의 사진 처럼 관계도 이모티콘을 클릭하면 나의 Remote Repository에도 업로드가 되었을 것이다.
(이미 본인은 사전에 작업하면서 상대방 레파지토리를 fork를 해놓은 상태라 업로드된 시점)
내 Remote Repository에 담긴 파일을 저장하기 전 마음에 드는 로컬 폴더 경로를 지정하고 git init
입력 하자
본인은 im-sprint-simple-git-workflow 폴더를 생성하여 지정하였다.
github의 Remote Repository 웹 주소를 복사하여 git clone www.github.com/@@@@
입력 후 로컬 폴더에 저장이 되었을 것이다.
git remote add @@@ https://@@@
입력하여 상대방과 나의 pull 상호작용 되도록 설정한다.
여기서 본인은 duo라고 정했으나, 상대방의 닉네임은 마음대로 설정하여도 좋다.
닉네임 옆의 웹 주소의 경우 상대방 또한 Remote Repository를 fork
하여 생긴 주소이다.
git remote -v
통해 주소가 제대로 등록 되었는지 확인할 수가 있다.
가장 좌측에서 확인해보면 origin의 경우 나 자신이고, duo는 내가 정해 놓은 상대방의 닉네임이다.
git pull @@@ master
을 통해 상대방이 코드 변경하며 push
해놓은
레퍼지토리를 내 로컬 폴더에(init
해놓은 폴더) 저장된 것을 확인할 수가 있다.
만일 나도 검토하고 수정할 것이 있다면 전에서 설명해준 git push origin master
를 활용하면 될 것이고,
상대방도 나의 Remote Repository를 검토할 필요가 있다면 pull
을 할 것이다.
만일 서로가 push를 동시에 한채로 pull을 할 경우 어떠한 문제가 발생할까??
내 로컬 저장소 파일과 pull 하여 받아온 파일 간의 정보가 서로 상이할 것이다.
그렇게 된다면 충돌 병합 과정 Merge conflict
이 발생한다.
(본인은 작업 도중 충돌 병합이 발생하지 않아, 예시로 발생한 사진을 이용함 )
출처 사진 : https://blog.naver.com/asdf2017/221574655738?viewType=pc
Automatic merge failed
가 있다는 것은 자동 병합에 실패한 것이다.
해당 파일이 어떠한 것이 충돌 되었는지는 git status
를 통해 더 자세히 알 수 있다.
해당 코드를 열어 녹색 영역은 내가 수정한 코드
파란색 영역은 상대방이 수정한 코드이다.
만일 내가 수정한 코드 내용으로 반영하기를 원한다면 Accept Current Change,
상대방이 변경한 코드 내용을 반영한다면 Accept Incoming Change,
둘 다 변경한 코드 내용을 반영 한다면 Accept Both Changes 클릭하면 된다.
그리고 다시 git commit
하여 push
하여 Remote Repository에 업로드만 하면
해결이 되었다.
이제 모든 push, pull 과정 까지 문제 없이 완료 하였다.
원본 레파지토리에 변경한 작업을 반영해달라고 요청(Request)할 수 있으며, 이 과정이 Pull Request
이다.
우선 나의 해당 Remote Repository에 들어가서 파란색 원인 "New pull request" 버튼을 클릭하자.
그리고 "Create pull request" 버튼을 클릭하면, 작성할 타이틀과 메세지를 남겨두고 보내면
상대방 원본 레파지토리 관리자에게 전송된다.
지금까지 진행한 내용을 다시 한 번 요약해보자.
1. 원본 레파지토리에 fork
를 하여 내 remote Repository에 생성이 된다.
2. 나의 로컬 폴더에 init
후 해당 폴더에 clone
을 하자
3. 함께 협업할 상대방의 remote Repository 주소를 파악 후 remote add @@@ https//@@@@
하자
4. 주소가 명확한지 remote -v
을 통해 확인하자.
5. 최종적으로 상대방 remote Repository를 가져오기 위해 pull @@@ master
하자
그 후 충돌 과정이 일어나면 위의 내용처럼 해결하고,
최종적으로 pull request를 통해 수정된 작업을 원본 관리자에게 전송하자.
글을 마치며
해당 글은 지금까지 필요한 기능만 간추려 요약하였다.
위 내용을 다뤄보았다면 앞으로 git에 대해 기본적인 기능을 아주 문제없이 다룰 수 있을 것이다.
이제 git을 이용할 줄 몰라서 더이상 눈치 볼 필요도 없고, 직장 동료들과 즐겁게 팀워크를 이뤄 보자!!!