[Day49] Github - Pull Request(풀 리퀘스트)

Validator·2023년 8월 23일
0

github pull-request?

코디 기여 원리 (Fork와 Pull Request)

다음과 같이 Gildong와 Minji 라는 깃헙 리포지토리가 있다고 하자.

이때 Minji가 GIldong 개발자의 프로젝트가 마음에 들어, 같이 프로젝트에 참여해 기여자(Contributer)로서 공헌을 하고 싶다고 한다.

하지만 내가 다른 사람의 저장소에 있는 코드를 수정하거나, 다른 사람의 저장소의 코드를 내가 수정하려면 관리자가 직접 나를 기여자(Contributer)로 등록이 되어있어야 한다.

하지만 모든 사람을 다 Contributer로 등록할 수는 없는 현실이다.

이때 사용하는 것이 Fork 이다.

포크로 쿡 찔러 가져오듯 다른 사람의 저장소에 있는 레포지토리를 내 원격 저장소, 깃허브로 가져오는 것이다.

즉, Minji라는 유저가 Gildong의 레포지토리 중 하나를 Fork하였다면, Minji의 github에 해당 레포지토리가 그대로 가져와 지게 된다.

그리고나서 Fork해온 원격 레포지토리를 내 로컬에 Clone 한 후 코드를 수정하면 된다.

Fork : 레포지토리를 원격저장소에 복사
Clone : 레포지토리를 로컬저장소에 복사

이제 Minji 개발자가 이것 저것 코드를 수정하거나 업그레이드 한 후, 아까 fork했던 Minji의 원격 저장소에 커밋한 뒤,

Gildong의 레포지토리에도 반영이 되면 좋겠다 생각이들면 Pull Request를 보내는 것이다.

그러면 Gildong이 코드 리뷰를 하고 문제가 없으면 자신의 메인 브랜치에 merge를 하는 식으로 프로젝트를 기여하는 방식이다.

Pull Request란?

따라서 Pull Request(PR)을 정리하자면, 내가 수정한 코드가 있으니 내 branch를 가져가 검토 후 병합해주라고 요청 해주는 것이라고 보면 된다. PR을 통해 코드 충돌을 최소화할 수 있고 push 권한이 없는 오픈 소스 프로젝트에 기여할 때 많이 사용한다.

위에서 Gildong과 Minji를 예를 들어 설명했지만 다시한번 총정리하자면 다음과 같다.

내 원격 리포지토리에 Fork
clone 설정
remote 설정
branch 생성
수정 작업 후 add, commit, push (만일 나 뿐만 아니라 다른 기여자(팀원)이 소스를 수정했다면 fetch로 코드를 가져와 충돌을 해결)
Pull Request 생성
Merge Pull Request
Merge 이후 동기화 및 branch 삭제


1. Pull Request(Pull 요청) 기본 개념

Pull Request(PR)GitHub에서의 중요한 협업 도구로, 한 브랜치에서 다른 브랜치로 변경 사항을 병합(merge)하려는 요청을 의미한다. 이는 코드의 변경 사항을 다른 팀원들에게 알리고, 리뷰를 받아 코드 품질을 유지하는데 중요한 역할을 한다.

1.1 브랜치(Branch)와 병합(Merge)

먼저, 브랜치(Branch)는 코드베이스의 독립된 사본을 의미하며, 다양한 기능 개발이나 버그 수정 작업을 독립적으로 진행할 수 있게 해준다. 예를 들어, 'feature-x'라는 브랜치에서 작업을 진행하다가 이를 'main' 브랜치에 병합하려는 경우가 있을 수 있다. 병합(Merge)은 두 브랜치의 변경 사항을 합치는 과정을 의미한다.

1.2 Pull Request 생성

Pull Request를 생성하려면, 먼저 GitHub 리포지토리에 변경 사항을 푸시(push)해야 한다. 그 후 GitHub의 인터페이스에서 'New Pull Request' 버튼을 클릭하여 Pull Request를 생성한다.

1.3 코드 리뷰(Code Review)

Pull Request는 코드 리뷰(Code Review)를 위한 플랫폼도 제공한다. 팀원들은 Pull Request에 대해 코멘트를 남기고, 필요하다면 추가적인 커밋을 통해 변경 사항을 제안할 수 있다. 모든 리뷰와 토의가 완료되면, Pull Request를 병합할 수 있다.

2. Pull Request 작동 방식

2.1 브랜치 생성 및 체크아웃

Pull Request 프로세스는 브랜치 생성으로 시작된다. 브랜치는 다음과 같이 생성할 수 있다:

git branch feature-x
git checkout feature-x

또는 한 줄로 표현할 수도 있다:

git checkout -b feature-x

이렇게 하면 'feature-x'라는 이름의 브랜치가 생성되고, 이 브랜치로 체크아웃(checkout)된다.

2.2 변경 사항 커밋

작업이 완료되면 변경 사항을 커밋(commit)한다:

git add .
git commit -m "Add new feature x"

여기서 git add . 명령어는 모든 변경 사항을 스테이징 영역에 추가하고, git commit -m 명령어는 변경 사항을 커밋한다.

2.3 브랜치 푸시

변경 사항을 GitHub 리포지토리에 푸시한다:

git push origin feature-x

이제 GitHub에서 'feature-x' 브랜치를 볼 수 있으며, 이 브랜치에 대한 Pull Request를 생성할 수 있다.

3. Pull Request 생성과 코드 리뷰

3.1 Pull Request 생성

변경 사항을 푸시한 후, GitHub 리포지토리의 페이지로 이동하여 New Pull Request 버튼을 클릭한다. 그런 다음 기본 브랜치(예: main 또는 master)와 병합하려는 브랜치(예: feature-x)를 선택한다. 이제 Pull Request의 제목과 설명을 작성하고, 필요한 경우 리뷰어(reviewer), 라벨(label), 프로젝트(project) 및 마일스톤(milestone)을 지정할 수 있다.

Title: Implement Feature X

Description:
This pull request includes the implementation of feature X which does ...

3.2 코드 리뷰 요청

Pull Request 생성 후, 지정된 리뷰어나 팀 전체에게 코드 리뷰를 요청할 수 있다. 리뷰어들은 코드 변경 사항을 확인하고, 코멘트를 남기거나 추가적인 변경을 요청할 수 있다.

3.3 코드 리뷰 응답

리뷰어의 피드백에 응답하려면 새로운 커밋을 생성하여 Pull Request에 푸시하거나, GitHub 인터페이스에서 직접 대화를 할 수 있다. 새로운 커밋을 푸시하면, Pull Request가 자동으로 업데이트된다.

git add .
git commit -m "Address review feedback"
git push origin feature-x

3.4 변경 사항 승인 및 병합

리뷰어가 변경 사항을 승인하면, Pull Request를 병합할 수 있다. Merge Pull Request 버튼을 클릭하고, 선택적으로 병합 커밋 메시지를 작성한 후 Confirm Merge 버튼을 클릭하여 병합을 완료하면 된다!

0개의 댓글