대딩 기록(~22.01)/Git & Github 공부노트

[Git] 풀 리퀘스트와 포크 (pull request, fork)

문과 해달 2021. 7. 31. 18:15

1) 풀 리퀘스트

 

앞서 머지는 브랜치 간의 병합 과정에서 충돌의 위험을 충분히 살피지 못한다고 말했다.

master 브랜치의 안정성을 높이기 위해 풀 리퀘스트를 사용한다. 풀 리퀘스트는 말 그대로

레포지토리의 누군가가 master 브랜치에 대한 병합을 요청하면,

레포지토리의 소유자가 충돌 사항에 대해 살펴본 후 승인을 해주는 방식이다.

 

풀 리퀘스트를 하는 방법은 두 가지가 있다.

1. 동일 레포지토리의 다른 브랜치에서 풀 리퀘스트를 보내는 것

2. 포크(fork)를 통해 다른 레포지토리에서 풀 리퀘스트를 보내는 것

 

2) 브랜치에서 풀 리퀘스트 보내기

 

지난 시간에는 로컬 브랜치만을 생성했다. 오늘은 Github 상에서 풀 리퀘스트를 해야만 하기에 레포지토리에도 동일한 브랜치를 만들어 주어야만 한다. add와 커밋 후에 진행하자.

git push -u origin (브랜치명)

푸시가 성공했다는 메세지를 확인한 후 github에 들어가 보면,

다음과 같이 'Compare & pull request'라는 버튼을 확인할 수 있다.

당연히 저 버튼을 통해 pull request를 보낼 수 있다. 눌러보면 다음과 같다.

 

맨 윗줄에서 base와 compare를 선택할 수 있다. base는 병합하려는 브랜치, compare는 병합시키려는 브랜치를 말한다.

지금은 바르게 되어있으니 건드릴 필요없다. compare 우측의 'Able to merge'는 충돌이 없어 자동적으로 병합이 가능함을 뜻한다.

그 아래 텍스트박스에서 풀 리퀘스트에 대한 코멘트 역시 남길 수 있다. 'Create pull request'를 통해 풀 리퀘스트를

보내자

 

이제는 승인을 해주는 단계이다.

지금은 충돌 위험이 뜬 것이 없기에, 초록 버튼들을 눌러 머지를 승인해주면 된다.

 

그러면 말풍선이 다음과 같이 바뀌게 된다. 브랜치는 원하는 지점까지 개발을 마치고 머지를 끝낸 후에

삭제하는 것이 정석적인 방법이다. 해당 브랜치를 계속 재사용하는 것이 아니다.

 

이제 레포지토리로 들어가 보면 병합된 내용이 반영되어 있을을 확인할 수 있다.

 

레포지토리, 즉 github 상에서의 작업은 마쳤으니 이를 로컬에도 적용시키자.

checkout을 통해 브랜치를 master로 옮기고,

git pull origin master

를 통해 레포지토리의 master 내용을 로컬 브랜치 master에 받아온다. 금방 레포지토리에서 브랜치를 삭제해주었 듯,

로컬 브랜치 역시 삭제해주자.

git branch -d (브랜치명)

 

3) 포크(fork)를 통해 풀 리퀘스트 보내기

 

이전 방법에선 브랜치에서 master로 풀 리퀘스트를 보냈다. 작업자 수가 몇 안되는 협업에서는 훨씬 간편하고

직관적이다. 하지만 작업자 수가 상당히 많다면? 수십, 수백 개의 브랜치를 생성하고 구분하기도 힘들 뿐 아니라

각 작업자도 중간 단계에서 master 브랜치에 영향을 주는 것을 최대한 지양해야만 한다.

 

이를 해결할 수 있는 방법이 포크(fork)이다. 포크란 레포지토리를 복제해 별개의 레포지토리를 만드는 것을 말한다.

포크는 기본적으로 남이 소유한 레포지토리를 복제해 오는 것이기에 직접 실습을 할 수는 없었다.

 

fork하려는 레포지토리의 우측 상단에서 다음과 같은 fork 버튼을 찾을 수 있다. 이를 통해 해당 레포지토리와 동일한 

새로운 레포지토리를 만들 수 있다. 다음부턴 이전의 레포지토리 상 작업법과 같다.

 

clone을 통해 디렉토리에 복사를 하고, remote add 를 통해 Github와 연결시킨다. 브랜치를 생성해 원하는 작업을 

한 후에, add, commit, push 순으로 진행하면, fork된 레포지토리에서 pull request버튼을 찾을 수 있다.

2)에서 한 방법과 똑같이 요청을 보내고, 머지에 대한 승인을 받으면 된다.