본문 바로가기
Git

Github WorkFlow

by 히포파타마스 2022. 9. 6.

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

댓글