-
오픈 프로젝트 기여하기 :: 마이구미GitHub 2018. 2. 27. 14:39반응형
이 글은 Github의 오픈 프로젝트에 기여하는 법을 다룬다.
오픈 프로젝트란, Github 에 존재하는 private이 아닌 대부분의 저장소로 볼 수도 있다.
결과적으로 Github 에서의 컨트리뷰터(contributor), 포크(fork) 의 용어를 이해하는데 도움이 된다.
오픈 프로젝트에 기여하게 된다면, 그 프로젝트의 컨트리뷰터가 된다.
컨트리뷰터는 오픈 프로젝트에 기여한 사람을 뜻한다.
기여의 기준은 없다.
주석을 쓰거나 오타를 수정하거나 버그를 해결하거나 똑같다.
오타 하나를 발견했더라도, 기여한 것이기 때문에 컨트리뷰터가 될 수 있다.
어떻게 기여할 수 있는가?
우선 순수하게 접근하는 방식이다.
- 관심있는 프로젝트의 저장소인 John 저장소를 내려받았다.
- 사용하다보니 버그를 발견했다.
- 버그를 수정한 후, 알려주기 위해 John 저장소에 push 를 한다.
- 하지만 실패했다.
실패한 이유는 나에게는 당연히 John 저장소에 쓰기 권한이 존재하지 않는다.
이러한 경우 우리는 Fork 기능을 사용한다.
지금 말하는 Fork 는 그림에서 보는 Fork 를 뜻한다.
Fork 를 클릭하게 되면, 프로젝트는 본인의 저장소에 그대로 복사된다.
그렇게 본인의 저장소에서 수정한 후, 원래 저장소(fork 대상)에게 수정사항을 알린다.
알리는 행위를 pull request 라고 한다. (위 그림에서도 볼 수 있다)
fork 후 기여하는 흐름을 그림으로 나타내면 다음과 같다.
전체적인 순서는 다음과 같다.
- 관심있는 저장소 Fork 버튼 클릭
- 본인의 저장소에 복사된 저장소 내려받기
- Fork 설정 [Configuring a remote for a fork]
- Fork 동기화 [Syncing a fork]
- 본인 저장소에 Push
- 원래 저장소에 Pull request [Creating a pull request]
시나리오를 통해 보면 다음과 같다.
본인이 vuejs/vue 저장소에 기여하고 싶다고 가정한다.
우선 프로젝트를 fork 한다.
본인의 저장소에 vue 프로젝트가 복사된 모습을 볼 수 있다.
명령어를 통한 순서는 다음과 같다.
$ git clone git@github.com:hotehrud/vue.git
fork 한 본인의 저장소를 clone 명령어를 통해 로컬 저장소로 가져온다.
그 후, 로컬 저장소에서 vue 저장소를 등록해주어야한다.
등록 전에 현재 원격 저장소에 관한 정보를 확인해보자.
$ git remote -v
origin git@github.com:hotehrud/vue.git (fetch) origin git@github.com:hotehrud/vue.git (push)
본인의 저장소만 등록된 모습을 볼 수 있다.
원래 저장소인 vue 를 등록해주어야한다.
$ git remote add upstream git@github.com:vuejs/vue.git
그 후 다시 확인해보면, 추가된 모습을 볼 수 있다.
$ git remote -v
origin git@github.com:hotehrud/vue.git (fetch) origin git@github.com:hotehrud/vue.git (push) upstream git@github.com:vuejs/vue.git (fetch) upstream git@github.com:vuejs/vue.git (push)
다음은 원래 저장소와 동기화를 해주는 작업이 된다.
$ git fetch upstream
upstream 저장소의 master 브랜치를 가져온다.
fetch 는 pull 과 동일하다.
pull과는 다르게 merge 의 여부가 자동으로 되어있지 않다는 차이점이 있다.
$ git checkout master
본인 저장소를 기준으로 merge 를 하기 위해 본인의 master 로 브랜치를 변경한다.
$ git merge upstream/master
이후 본인의 master 브랜치로 upstream/master 를 합쳐지게 된다.
그 후, 본인이 원하는 코드를 수정 후 본인의 저장소에 push 한다.
Github 저장소 메인 페이지에서 "New pull request" 버튼을 눌러 수정사항을 원래 저장소에게 알린다.
저장소의 소유주와 토론해가면서 판단하여 merge 또는 closed 를 하게 된다.
merge 가 될 경우, 그 프로젝트의 컨트리뷰트가 되는 것이다.
위와 같은 흐름은 현재 기술 블로그에서 쉽게 접할 수 있다.
카카오 기술 블로그의 README.md 를 참고하면 도움이 될 것이다.
반응형'GitHub' 카테고리의 다른 글
Github Action 알아보기 (1) :: 마이구미 (2) 2021.11.15 Github Pages 란 무엇인가? :: 마이구미 (2) 2018.01.27 .gitignore 패턴 :: 마이구미 (0) 2017.09.06 git tag 사용법 :: 마이구미 (0) 2017.05.13 git rm --cached 파일 삭제 :: 마이구미 (3) 2017.01.20