[Tip] github 사용법 - Branch&PR 2편


지난 포스팅

1. 마크다운 문법

2. github 가입 및 다운로드

3. git bash shell 명령어

4. git 사용법 - 코드 관리(SCM) & 버전 관리(VCS)

5. github 사용법 - push&pull

6. github 사용법 - Branch&PR 1편


지난 포스팅에서는 github의 협업 시나리오 중 하나인 Branch & PR 모델에서 브랜치를 생성하고 merge를 수행하는 방법을 알아봤습니다. 이번 포스팅에서는 PR (Pull request)을 하는 방법에 대해 알아보겠습니다.

PR이란 말 그대로 브랜치master에게 자신의 작업물을 pull 해줄 것을 요청(request)하는 것입니다. 협업 상황에서 브랜치PR을 거치지 않고 마음대로 자신의 작업물을 master에 push 한다면 버그를 관리하는 것이 굉장히 어려울 것입니다. master는 PR을 통해 브랜치의 작업물을 신중하게 검토해볼 수 있고 다른 브랜치의 작업물과 비교하는 것을 통해 더 나은 것을 선택할 수도 있을 것입니다.

PR 상황을 직접 구현해보려면 계정이 두 개가 필요합니다. 같이 공부하는 친구가 있다면 친구와 함께 따라해보시면 될 것 같습니다. 만약 저처럼 친구가 없다면 (또륵…) 계정을 하나 더 만드신 다음 해보셔도 좋습니다.

먼저 원격 저장소를 만든 다음 Collaborator를 초대하는 방법을 보여드리도록 하겠습니다. 원격 저장소를 만들고 로컬 저장소와 연결시키는 방법은 생략하겠습니다. 지난 포스트를 참고해주세요.


image-20200925205010351

원격 저장소를 생성한 다음 Settings를 클릭해주세요.


image-20200925205232524

좌측 중단에 있는 Manage access를 클릭합니다.


image-20200925205415645

살짝 아래로 내리면 Invite a collaborator를 볼 수 있습니다. 클릭해주세요.


image-20200925205643670

초대하길 원하는 사용자의 아이디를 입력하고 Add to this repository 버튼을 클릭하면 초대가 완료됩니다.


이제 초대를 받은 사람의 입장입니다. 초대를 받기 위해서는 가입할 때 입력한 이메일로 들어가줍니다.

image-20200925211343620

View invitation을 누르면 초대 페이지로 이동합니다.


image-20200925211717192

Accept invitation을 누르시면 수락됩니다.


이제 두 명의 collaborator가 하나의 원격 저장소에서 협업을 하게 되었습니다! 프로젝트의 주제는 3행시 짓기 입니다. 원격 저장소를 만든 사람이 프로젝트의 팀장, 초대를 받은 사람이 팀원이라고 합시다. 협업의 흐름은 다음과 같습니다.

  1. 팀장은 README.md를 통해 3행시 과제를 내줍니다.
  2. 팀원은 3행시를 완성시키고 팀장에게 PR을 보냅니다.
  3. 팀장은 팀원이 보낸 PR의 내용을 확인하고 마음에 들면 master 브랜치에 merge 합니다.

먼저 팀장이 되어보도록 하겠습니다. 삼행시 과제 파일을 만들고 파일 이름을 README.md로 짓습니다. githubREADME.md라는 이름의 파일을 자동으로 인식해 원격 저장소에 대한 소개 글로 나타냅니다.

image-20200925213258929

typora를 이용해 위와 같이 3행시 과제 파일을 만들고 add, commit, push 해줍니다. 반드시 README.md라는 이름으로 만들어야 소개글로 나타나게 됩니다.


image-20200925213657527

원격 저장소에 이렇게 나오면 제대로 된 것입니다.


이제 팀원이 되어봅시다. 먼저 git pull을 통해 원격 저장소를 로컬로 가져온 다음 반드시 브랜치를 생성해줍니다. 브랜치를 생성하지 않고 바로 master로 push 해버리는 순간 아마 팀장님이 죽이러 오실지도 모릅니다…ㅎ (물론 실제로는 master branch로 push 할 수 있는 권한 자체가 주어지지 않을 것입니다.)

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (master)
$ git pull origin master
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 270 bytes | 18.00 KiB/s, done.
From https://github.com/lhmlhm1111/collabo
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (master)
$ git branch hakmin

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (master)
$ git checkout hakmin
Switched to branch 'hakmin'

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (hakmin)
$

위와 같이 먼저 branch를 생성하고 이동한 후 삼행시를 수정해줍니다.

image-20200925215235768


늘 하듯이 add, commit을 하고 절대로 git push origin master를 해서는 안됩니다. 계속 강조하지만 master 브랜치에 바로 push하는 것은 아무런 검증도 하지 않고 본 서버에 업데이트를 해버리는 것입니다. 따라서 원격 저장소에 브랜치를 생성하고 그곳에 push를 해야합니다. git push origin 브랜치이름으로 해주시면 됩니다.

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (hakmin)
$ git add README.md

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (hakmin)
$ git commit -m "modify README.md"
[hakmin 8dd21c7] modify README.md
 1 file changed, 3 insertions(+), 3 deletions(-)

lhmlh@DESKTOP-99JLML6 MINGW64 ~/house (hakmin)
$ git push origin hakmin #절대 master로 push하면 안됨
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 375 bytes | 187.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'hakmin' on GitHub by visiting:
remote:      https://github.com/lhmlhm1111/collabo/pull/new/hakmin
remote:
To https://github.com/lhmlhm1111/collabo.git
 * [new branch]      hakmin -> hakmin

그럼 이제 다시 원격 저장소로 가보도록 합시다. 아무 변화가 없는 것 같지만 사실 변화가 생겼습니다.

image-20200925220340381

빨간색으로 표시한 부분을 클릭하면


image-20200925220439798

hakmin 이라는 브랜치가 생긴 것을 발견할 수 있습니다. 클릭해주세요.


image-20200925220727319

hakmin 브랜치에 수정된 사항이 반영된 것을 볼 수 있습니다. 우측 상단에 Pull request를 클릭해줍니다.


image-20200925221027919

이제 팀장님께 채택해달라고 싹싹 비시면 됩니다. Create pull request를 눌러줍니다.


image-20200925221628376

모든 PR의 목록은 좌측 상단의 Pull request 탭에서 확인 가능합니다. 만약 삼행시가 마음에 들면 중간에 있는 Merge pull request를 누른 후 Confirm merge를 눌러주시면 됩니다. 만약 마음에 들지 않는다면 Close pull request를 눌러 기각시키면 됩니다. Merge를 하고 master 브랜치로 이동해봅시다.

(참고로 Merge를 하고 나면 브랜치를 지울 것인지 물어봅니다. 대부분의 경우 branch는 일회용이므로 그때 그때 지워주는 것이 좋다고 합니다.)


image-20200925222152137

제대로 merge가 된 것을 확인할 수 있습니다.


지금까지 Branch & PR 모델에 대해 알아보는 시간을 가졌습니다. Branch & PR은 매우 효율적인 협업 모델이지만 Collaborator로 초대되지 않은 사람은 협업에 참여할 수 없다는 한계가 있습니다. 이러한 한계점을 보완하기 위한 협업 모델이 다음 포스트에서 다룰 Fork & PR 모델이 되겠습니다. 읽어주셔서 감사합니다~


다음 포스팅

github 사용법 - Fork & PR