이 문서는 5인으로 구성된 소규모 팀이 깃헙을 협업도구로써 잘 활용하는 방법에 대해서 공부해서 정리했습니다. 실제 팀원들이 이 문서를 활용해서 협업에 활용할 수 있도록 메뉴얼 형식으로 작성되었습니다.
한 개의 프로젝트에 여러 명이 코드를 작성하다보면 당연히 나의 코드를 다른 사람이 수정할 수 있고 다른 사람이 수정한 코드가 내가 짠 코드와 맞지 않는 문제가 발생할 여지가 매우 크다. 그래서 깃헙을 사용해서 그러한 충돌을 최소화하고 이를 통해 팀원들과 원활한 의사소통을 하는 것이 생산성에 매우 중요하다.
다른 사람이 짠 코드와 충돌을 막기 위해서 깃에서 제공하는 branch 라는 것을 활용하는데 기본적으로 본인이 구현할 기능별로 branch 를 만들어서 프로젝트를 진행할 것이다.
위 이미지에서는 develop 브랜치가 따로 있지만 이번 프로젝트에서는 master 브랜치가 따로 있고 각자 본인이 맡은 기능별로 branch를 만들어서 기능 구현이 완료되면 master 브랜치에 pull request 를 보내서 merge하는 방식으로 진행할 것이다.
이제부터 ft_transcendence 프로젝트 팀에서 따라야 할 협업 방식에 대해서 설명하겠습니다.
clone
합니다.git clone [git repo]
git branch // 현재 로컬 저장소에 있는 브랜치 목록을 불러옵니다.
git branch navbar //navbar 기능을 구현할 브랜치 이름으로 브랜치 생성
git checkout navbar //navbar 브랜치로 이동하기
//위 두 줄의 코드를 한 번에 하려면
git checkout -b navbar //navbar라는 브랜치를 만들면서 동시에 이동하기
주의! 여기서 master에 push를 해버리면 절대 안 됩니다!
하지만 push를 못하게 막아놨기 때문에 어차피 안 될 것입니다.
git add .
git commit
git push origin navbar
git pull origin navbar
위 이미지에서 좌측 상단 Pull requests탭을 클릭한 후에 New pull request버튼을 누르면 위와 같은 화면이 나옵니다. 중간에 브랜치를 선택하는 화면에서 본인의 브랜치를 선택해서 main <- navbar
가 되도록 합니다.
Leave a comment
부분에 작성합니다. 그 후에 중요한 점은 우측에 표시한 부분입니다.이렇게 PR을 생성하면 다른 팀원들에게 메일로 알람이 갑니다. 그러면 다른 팀원들은 변경된 코드를 확인하고 코멘트를 달아서 의견을 게시합니다.
다음은 다른 팀원이 코멘트를 달고 PR을 승인하거나 거절하는 상황입니다.
위 이미지에서 표시한 Add your review
버튼을 눌러서 코드리뷰를 시작합니다.
코멘트를 달고 싶은 코드 부분을 드래그해서 선택하고 작성하면 됩니다.
코멘트를 다 작성하고 난 후에 우측 상단에 있는 Review changes
를 클릭합니다.
단지 코멘트만 달고 싶을 때는 Comment
를 클릭해서 리뷰를 남기면 됩니다.
5-1. 코드에서 문제점을 발견했을 경우(PR 거절)
Request changes
를 선택하고 Submit review
를 클릭합니다.
팀원이 이렇게 PR을 거절하면 PR을 올린 사람이 코드 리뷰를 확인할 때 거절당한 것을 알 수 있습니다. 그러면 PR을 생성한 사람이 코멘트를 참고해서 자신의 코드를 수정하고 다시 git push
를 하면 해당 PR이 살아있는 상태에서 commit이 추가가 됩니다. 그러면 PR을 거절한 팀원이 새로운 커밋을 확인하고 승인을 해주면 됩니다.
여기서 바로 approve 를 하면서 comment를 남기면 이에 대해서 PR을 생성한 팀원이 추가적인 코멘트를 달 수 없으니 서로 코멘트를 통한 충분한 리뷰 이후에 완전히 납득하고 최종적으로 approve를 해줘야 합니다.
5-2. 정상적인 코드라고 판단했을 경우(PR 승인)
Approve
를 선택하고 Submit review
를 클릭합니다.
이 부분은 사실 아무나 merge 할 수 있지만 본인이 직접 하는 것을 우리 팀의 원칙으로 정하고자 합니다.
이 때 Squash and merge
를 선택해서 merge를 하면 master 브랜치에 해당 코드(새로 구현한 기능)가 추가됩니다.
Squash and merge
를 하는 이유는 그 기능을 완성하는데 여러 커밋메세지들이 쌓일텐데 그 부분을 하나로 묶어줘서 PR 단위로 커밋로그를 새로 만들 수 있기 때문입니다. 커밋내용을 여기서 상세하게 다시 종합해서 적어주면 더 좋은 commit log 가 쌓일 것 같습니다.
본인이 직접 merge를 하면 delete branch
버튼이 활성화됩니다. 이 버튼을 눌러서 기능개발이 완료된 branch를 삭제해서 더 깔끔한 상태로 유지합시다.
이렇게 PR이 master 브랜치에 merge가 되면 다른 팀원들은 작업중인 본인의 로컬 컴퓨터에서 master branch를 최신화 해줘야 합니다.
//<본인의 로컬 컴퓨터에서 본인의 브랜치에서 작업을 하는 상황>
git checkout master //master 브랜치로 이동
git pull origin master //PR 이 merge 됐기 때문에 master브랜치를 새로 가져옴
git checkout mainpage //본인이 작업하던 본인 브랜치로 이동
git merge master //본인 로컬 컴퓨터에 최신화된 master 브랜치를 개인 브랜치로 가져옴
이 방식이 기본적으로 팀에서 협업도구로써 깃헙을 활용하는 방법입니다.
추가적으로 깃헙에서 해당 기능에 대해서 issue를 발급하고 그 이슈에 대해서 본인이 작업하고 있는 것을 다른 팀원들에게 가시적으로 보여줄 수 있습니다. 그래서 원칙적으로 어떤 기능을 맡아서 개발할 때는 해당 issue가 생성돼있지 않다면 본인이 직접 issue를 발행해서 PR과 연결하여 개발을 진행해주시면 됩니다.
다른 사람들은 issue를 자유롭게 발행해서 다른 이러이러한 일을 해야 한다는 것을 모든 팀원들에게 보여줄 수 있습니다. 이렇게 우리 팀이 진행해야 할 과제들에 대해서 서로 공유가 될 수 있고 어떤 팀원이 어떤 개발을 하고 있는지를 깃헙 Project
탭에서 확인할 수 있습니다.
물론 위 이미지는 테스트용이기 때문에 issue 제목 등은 명확해야 합니다. 참고용으로만 봐주시면 됩니다ㅎㅎ