📌git config에서 유저의 이름과 이메일을 설정해준 상태에서 진행해주세요!
GitHub 에서 원격 저장소에 Pull Request를 하여 코드 기여를 하는 방법을 정리해 보겠습니다.
PR(Pull Request)은 오픈소스 프로젝트에 참여할 때 가장 기본이 되는 동작이라고 할 수 있습니다.
기여, 협업하고자 하는 저장소를 나의 저장소로 fork 합니다.
$git clone https://github.com/YOUR_FORK_USERNAME/YOUR_FORK_REPOSITORY.git
$git clone https://github.com/moonstar97/Structure.git
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)
=> 내 저장소만 보임
❗ 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 저장소가 함께 보임
clone 해 온 저장소의 처음 branch는 기본적으로 master(혹은 main)인데, 여기에 코드를 수정하고 PR을 보낼 용도로만 사용할 새로운 branch를 생성해야 합니다.
명령어는 아래와 같습니다. 아래 명령어를 통해 branch가 만들어짐과 동시에 현재 branch도 새로 만든 것으로 변경됩니다.
$ git checkout -b BRANCH NAME
$ git checkout BRANCH NAME
오픈소스 프로젝트는 말 그대로 누구에게나 오픈된 소스를 유지보수 혹은 서비스 합니다.
오픈소스의 특성상 나 혼자만 contribution을 하는것이 아니기 때문에 메인 저장소와 sync해야 합니다.
누군가가 수정한 코드가 내가 작업하고 있는 원격 repo와 함께 가야 합니다.
이러한 과정을 바로 fetch 과정이라고 합니다. 아래 명령어를 실행해 메인 저장소(upstream)의 원본 소스코드의 내용을 로컬에 내려받습니다.
$ git fetch upstream
$ git merge upstream/master (혹은 main)
$ git push origin master (혹은 main)
❗ 단순히 원격 저장소의 바뀐 내역을 확인만 하려면 fetch 명령어를 활용하고, 그 바뀐 내역을 내 로컬 데이터에 병합까지 자동으로 하려면 pull 명령어를 활용하게 됩니다.(pull은 fetch + merge 와 같습니다.)
만들어둔 PR용 브랜치 내에서 오픈소스에 기여할 부분을 수정합니다.
코드 수정을 모두 완료했다면, git add & git commit 을 진행합니다.
$ git add .
$ git commit -m "커밋메세지"
$ git push origin BRANCH NAME
git push를 진행한 후 fork한 나의 github repository로 가면 Compare & pull request
버튼이 활성화됩니다.
버튼을 누르면 기여할 프로젝트에서 미리 설정된 Pull Request 양식이 뜹니다. 그러면 여기에 프로젝트의 양식과 규칙에 맞게 자신이 기여한 것들을 작성해 주시면 됩니다.
이후 Create pull request 버튼을 눌러서, 오픈소스 프로젝트에서 나의 PR이 승인되어 merge될 때 까지 기다립니다.
내가 보낸 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)