Github WorkFlow
깃허브를 이용해서 협업을 하는 방법과 절차에 대해서 알아본다.
1. 공용 Repo 생성
팀원들과 협업할 공용 repository를 생성한다.
[공용 Repo]
이후 공용 Repo에 Colaborator로 같이 협업할 동료를 지정하거나, Organization을 사용한다면 협업할 동료에게 공용 Repo에 권한을 주어 같이 협업할 동료를 구성할 수 있다.
2. Issue 생성
개인 Repo를 사용하는 것과는 달리, 협업 중에는 Repo에 개인 작업을 하기 전에 팀원들에게 어떤 작업을 할 것인지 알려줘야 할 필요가 있다.
GitHub는 Issue라는 기능을 사용해, 작업할 내용을 편리하게 팀원들에게 공지할 수 있도록 한다.
[Issue 탭 버튼]
[Issue 생성 버튼]
[Issue 생성]
내가 작업할 내용을 작성하면 된다.
- Assignees : 해당 Issue의 책임자를 의미한다.
- Labels : 해당 Issue의 테마를 지정
[Issue]
생성된 Issue에 팀원들이 자유롭게 Comment를 추가할 수 있다.
3. Work
3.1 git clone & pull origin main
만약 내 로컬 pc에 공용 Repo가 없다면, 우선 해당 Repo를 clone 한다.
[clone]
이미 로컬 pc에 공용 Repo가 있는 경우, 혹시라도 원격 저장소(공용 Repo)가 업데이트됐을 수 있기 때문에 로컬 저장소의 main에 원격 저장소의 main을 pull을 사용해서 최신화해준다.
[pull]
3.2 Branch 생성
협업을 할 경우 main 브랜치에서 곧바로 작업을 하면 안 된다.
공용 Repo는 나 혼자만 사용하는 것이 아니기 때문에 팀원들의 개인 작업은 main이 아닌 다른 브랜치에서 이루어져야 한다.
또한 협업관계에서는, main 브랜치에는 허용된 변경사항만이 적용돼야 한다.
때문에 로컬 환경에서 작업을 한 후 공용 Repo에 이를 반영하고 싶다면 새로운 브랜치를 생성하고 작업을 진행해야 한다.
[브랜치 생성-이동]
3.3 개인 작업 진행
새로운 브랜치에 공용 Repo에 반영할 작업을 진행하면 된다.
[작업 진행]
앞서 Issue에 적은 내용을 반영하였다.
변경 사항을 적용하고 commit 한다.
[commit]
추가할 commit이 없고 작업이 끝났다면 원격 저장소의 작업 브랜치에 나의 작업을 push 해서 반영한다.
[push]
위 예시와 같이 원격 저장소 명(origin)과 생성할 브랜치(feat/#1)를 명시하면 원격 저장소에 지정된 브랜치가 생성되고 내 작업이 반영된다.
[원격 저장소_브랜치 생성]
4. Pull Requests
내 작업을 원격 저장소에 반영하면 변경 사항을 main에 병합할지를 선택할 수 있다.
이를 GitHub에서는 Pull Requests라 한다.
앞서 예제와 같이 내 작업을 원격 저장소에 반영하면 다음과 같이 Pull Requests를 할 지에 대한 여부가 나온다.
[pull request 버튼 생성]
Pull Request 버튼을 누르면 다음과 같이 PR을 생성하는 창이 나온다.
[pull request 생성 화면]
PR 생성 창에서는 위와 같이 main에 어떤 브랜치를 병합시킬지에 대한 내용을 볼 수 있다.
그 외에 내가 생성한 Reviewers를 지정할 수 있고 Issue와 같이 Assigness, Label 등을 지정할 수 있다.
PR의 내용을 채워, 생성하면 다음과 같은 화면이 나온다.
[pull request]
생성된 PR에서는 Issue와 비슷하게 PR의 History를 확인할 수 있으며, PR에 적용되는 Commit과 변경사항, 코드 수정량 등을 확인할 수 있다.
4.1 코드 리뷰
PR이 생성되면 팀원들은 PR에서 변경된 사항에 대해 리뷰를 할 수 있다.
PR의 Files changed를 누르면 PR로 변경된 사항들을 확인할 수 있고 리뷰를 작성할 수 있다.
[files changed]
각 코드에 특별히 쓸 리뷰가 없다면 오른쪽 위의 Reivew change를 눌러서 변경 사항 전체에 대한 리뷰를 남길 수 있다.
각 코드에는 개별적으로 리뷰와 코멘트를 작성할 수 있다.
[comment 작성]
Add single comment는 단순히 코드에 대한 댓글을 적는 기능이다.
comment는 작성 시 모든 팀원들이 바로 볼 수 있으며, 자유롭게 추가적인 댓글을 작성할 수 있다.
[comment]
추가적인 댓글이 없다면 Resolve conversation을 눌러 comment를 닫아준다.
start a review를 누르면 reivew가 시작되며, 코드에 작성된 reivew는 리뷰를 끝낼 때까지 다른 팀원들에게 보이지 않는다.
[review_pending]
코드의 reivew를 작성하면 위 예시와 같이 Pending 상태가 되어 리뷰를 완료할 때까지 다른 팀원들은 해당 reivew를 볼 수 없다.
[Finish your review 그 1]
코드에 대한 리뷰가 생성됐다면 다음과 같이 리뷰를 끝내는 버튼이 활성화된다.
[Finish your review 그 2]
리뷰를 완료할 때 남길 메시지를 적을 수 있고 리뷰의 결과에 대한 선택을 할 수 있다.
- Comment : 승인이나 변경 요구가 아닌 단순한 Comment성 리뷰일 경우 선택한다.
- Approve : 변경사항에 대한 승인 의사를 표현할 때 선택한다.
정책에 따라 Merge를 하기 위해서는 특정 인원 이상에게 Approve 된 리뷰를 받아야 할 수 있다.
- Request changes : 리뷰 결과, 코드에 대한 수정이 필요할 경우 선택한다.
리뷰를 완료하면 다음과 같이 PR History에 리뷰가 추가되고 모든 팀원들이 리뷰 사항을 확인할 수 있다.
[reivew 완성]
PR History에 추가된 리뷰에서는 리뷰어가 선택한 리뷰 결과에 따른 아이콘과 리뷰에 대한 정보들을 확인할 수 있다.
추가적으로 리뷰에 대한 Comment를 작성할 수 있으며, 리뷰에 대한 논의가 끝나면 Resolve conversation을 눌러 리뷰를 닫아 줄 수 있다.
4.2 추가 Commit 반영
만약 리뷰어가 Request changes로 리뷰를 작성해서 수정을 요청한다고 하자.
이 경우 PR작성자는 해당 수정을 적용해야 할 것이다.
이런 상황에서는 PR을 닫고 추가 작업을 하고 다시 PR을 날릴 필요는 없다.
로컬 작업환경에서 추가적인 작업을 한 뒤 원격 저장소에 이를 반영해주면 자동으로 PR에 반영이 된다.
[추가 작업 진행]
앞서 리뷰의 예시를 반영해서 text를 수정하였다.
작업이 완료되었다면 해당 사항을 commit 하고 원격 저장소에 반영한다.
[추가 commit & push]
추가로 반영한 commit이 기존에 PR에 반영된다.
[추가 commit_PR 반영]
위 예시와 같이 수정사항을 반영한 뒤, 수정 요구에 대한 코멘트를 작성하면 된다.
4.3 Merge
PR에 대한 리뷰와 특정 인원 이상에게 Approve 리뷰를 받았다면 다음과 같은 화면에서 Merge를 할 수 있다
[Merge 버튼]
해당 화면에서는 Merge 하기 위해 몇 명의 Approve 리뷰가 필요한지, Merge를 시행할 시, 충돌이 발생하는지에 대한 정보를 확인할 수 있다.
최종적으로는 위 예시에서 나오듯이 왼쪽 아래의 Merge 버튼을 눌러 Merge를 할 수 있다.
Merge에는 다음과 같이 3가지 옵션이 존재한다.
[Merge 옵션]
- Create a merge commit : 내가 작업한 브랜치를 main에 바로 병합한다.
내가 작업한 브랜치의 commit 사항이 전부 main에 합쳐진다.
- Squash and merge : 내가 작업한 브랜치의 commit을 전부 합치고, 합쳐진 내용으로 main에서 commit을 생성한다.
Squash and merge를 선택하면 다음과 같이 통합해서 생성할 Commit의 양식이 나타난다.
[Squash and merge 양식]
merge를 실행하면 다음과 같이 PR이 닫힌다.
[PR close]
개인적으로 작업한 브랜치는 main에 병합되어 사용될 일이 없기 때문에 Delete branch를 눌러서 삭제해 줄 수 있다.
마지막으로, PR을 끝내고 성공적으로 main에 내가 작업한 사항이 병합되었다면 원격 저장소의 main을 나의 로컬 저장소에 반영해 주어야 한다.
[main 변경 사항 최신화]
main 브랜치로 이동한 이후에 원격 저장소의 main을 반영해 준다.
협업 시, 위와 같은 workFlow를 반복하며 작업이 진행된다.
'Git' 카테고리의 다른 글
커밋 메시지 수정하기(intelliJ) (0) | 2023.08.13 |
---|---|
Git Submodule (0) | 2022.08.24 |
댓글