[git] 프로젝트 관리 - Pull Request(PR) 보내는 방법 : Contribution 하기

문종현·2022년 10월 21일
2

정보공유

목록 보기
3/11
post-custom-banner

Pull Request(PR) 보내는 방법 : Contribution 하기

📌git config에서 유저의 이름과 이메일을 설정해준 상태에서 진행해주세요!

GitHub 에서 원격 저장소에 Pull Request를 하여 코드 기여를 하는 방법을 정리해 보겠습니다.

PR(Pull Request)은 오픈소스 프로젝트에 참여할 때 가장 기본이 되는 동작이라고 할 수 있습니다.

1. github repository fork

기여, 협업하고자 하는 저장소를 나의 저장소로 fork 합니다.

  • fork한 저장소에 가보면 정상적으로 fork가 되어 있는 것을 확인할 수 있습니다.

2. 내 컴퓨터에 저장소 Clone 하기

  • fork한 저장소를 git clone 해오겠습니다. git bash에서 작업할 repository로 이동 후 아래 명령어를 입력해 주세요.
$git clone https://github.com/YOUR_FORK_USERNAME/YOUR_FORK_REPOSITORY.git 
  • 포크한 저장소(내 저장소)의 주소를 clone 합니다.

  • 저장소가 다음과 같다면, 명령어는 다음과 같이 입력합니다
$git clone https://github.com/moonstar97/Structure.git

3. 원격 저장소 Remote 설정하기

  • clone 해 온 저장소에 원격 저장소 설정을 합니다. 즉, 내가 PR을 보낼 곳을 추가해 주는 것입니다.

    • 즉, 내가 포크해온 저장소의 주소를 추가하는 것입니다.
  • 원격 저장소와의 싱크를 위해 upstream을 설정합니다. 원격 저장소의 git 주소는 fork를 해온 원래의 저장소를 말합니다.

  • 이 작업은 추후에 fork 저장소를 원격 저장소의 최신 커밋으로 내용을 변경해야 하므로 진행해야 합니다.

  • 다른 누군가가 Pull Request한 오픈 소스 프로젝트 코드를 내 오픈 소스 프로젝트 저장소로 적용하기 위한 과정을 upstream이라 합니다.

$ git remote add upstream https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git
  • 아래 명령어로 저장소 설정을 볼 수 있습니다.
$ git remote -v

❗ 위의 명령어를 실행했을 때, upstream이 remote로 등록되지 않았으면 다음과 같이 나타납니다.

origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

=> 내 저장소만 보임

  • 리모트 저장소(원격 저장소)에 원본 저장소를 설정해야, 원본 저장소에서 최신 수정 내역들을 내 작업에 반영할 수 있고, PR을 날리는 등 다른 사람들과의 협업이 가능합니다.

❗ upstream이 remote로 정상적으로 등록되었다면, git remote -v 를 실행했을 때 다음과 같이 보이게 됩니다.

origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

upstream  https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git (fetch)
upstream  https://github.com/ORIGIN_OWNER/ORIGIN_REPO.git (push)

=> 내 저장소와 upstream 저장소가 함께 보임

  • remote 저장소 설정은 최초 한 번만 하면 됩니다.

4. PR용 branch 생성하기(생략 가능)

  • clone 해 온 저장소의 처음 branch는 기본적으로 master(혹은 main)인데, 여기에 코드를 수정하고 PR을 보낼 용도로만 사용할 새로운 branch를 생성해야 합니다.

  • 명령어는 아래와 같습니다. 아래 명령어를 통해 branch가 만들어짐과 동시에 현재 branch도 새로 만든 것으로 변경됩니다.

$ git checkout -b BRANCH NAME
  • 브랜치간 이동도 마찬가지로 git checkout 명령어를 사용합니다.
$ git checkout BRANCH NAME

5. 메인 저장소와 내 저장소 싱크하기

  • 오픈소스 프로젝트는 말 그대로 누구에게나 오픈된 소스를 유지보수 혹은 서비스 합니다.

  • 오픈소스의 특성상 나 혼자만 contribution을 하는것이 아니기 때문에 메인 저장소와 sync해야 합니다.

  • 누군가가 수정한 코드가 내가 작업하고 있는 원격 repo와 함께 가야 합니다.

  • 이러한 과정을 바로 fetch 과정이라고 합니다. 아래 명령어를 실행해 메인 저장소(upstream)의 원본 소스코드의 내용을 로컬에 내려받습니다.

$ git fetch upstream
  • 내려받은 소스 코드를 실제 내 repository에 merge 시킵니다.
$ git merge upstream/master (혹은 main)
  • 이후 내 원격 저장소로 push 해줍니다.
$ git push origin master (혹은 main)
  • fetch : 최신 커밋 내역을 가져온다. merge는 하지 않는다.
  • pull : 최신 커밋 내역을 가져오고, 로컬 저장소(내 저장소)에 merge 까지 자동으로 해 준다.

❗ 단순히 원격 저장소의 바뀐 내역을 확인만 하려면 fetch 명령어를 활용하고, 그 바뀐 내역을 내 로컬 데이터에 병합까지 자동으로 하려면 pull 명령어를 활용하게 됩니다.(pull은 fetch + merge 와 같습니다.)

6. 코드 수정하기

  • 만들어둔 PR용 브랜치 내에서 오픈소스에 기여할 부분을 수정합니다.

  • 코드 수정을 모두 완료했다면, git add & git commit 을 진행합니다.

$ git add .
$ git commit -m "커밋메세지"

7. PR용 branch에 Push하기

  • 커밋한 이후에는 현재 들어와 있는 PR용 branch에 push를 해야 합니다.
$ git push origin BRANCH NAME

8. PR 요청

  • git push를 진행한 후 fork한 나의 github repository로 가면 Compare & pull request 버튼이 활성화됩니다.

  • 버튼을 누르면 기여할 프로젝트에서 미리 설정된 Pull Request 양식이 뜹니다. 그러면 여기에 프로젝트의 양식과 규칙에 맞게 자신이 기여한 것들을 작성해 주시면 됩니다.

  • 이후 Create pull request 버튼을 눌러서, 오픈소스 프로젝트에서 나의 PR이 승인되어 merge될 때 까지 기다립니다.

9. PR 승인이 되었다면 branch 삭제하기

  • 내가 보낸 PR이 승인되어 메인 저장소에 merge 되었다면, 이제 위에서 생성한 PR용 branch는 작업이 끝났으니 삭제해도 됩니다.

  • 다른 브랜치로 변경(checkout)한 후 아래 명령어를 실행합니다.

# local branch 삭제
$ git branch -D BRANCH NAME

# remote branch 삭제
$ git push origin : BRANCH NAME (혹은 git push origin --delete BRANCH NAME)
  • git bash 에서 git branch 명령어로 확인할 수 있는 것이 local branch이고, git branch -r 을 입력하여 나오는 브랜치 혹은 github 사이트에서 확인할 수 있는 branch를 remote branch 라고 생각하시면 됩니다.
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글