• 오픈 프로젝트 기여하기 :: 마이구미
    GitHub 2018. 2. 27. 14:39
    반응형

    이 글은 Github의 오픈 프로젝트에 기여하는 법을 다룬다.

    오픈 프로젝트란, Github 에 존재하는 private이 아닌 대부분의 저장소로 볼 수도 있다.

    결과적으로 Github 에서의 컨트리뷰터(contributor), 포크(fork) 의 용어를 이해하는데 도움이 된다.


    오픈 프로젝트에 기여하게 된다면, 그 프로젝트의 컨트리뷰터가 된다.

    컨트리뷰터는 오픈 프로젝트에 기여한 사람을 뜻한다.


    기여의 기준은 없다.

    주석을 쓰거나 오타를 수정하거나 버그를 해결하거나 똑같다.

    오타 하나를 발견했더라도, 기여한 것이기 때문에 컨트리뷰터가 될 수 있다.


    어떻게 기여할 수 있는가?


    우선 순수하게 접근하는 방식이다.


    1. 관심있는 프로젝트의 저장소인 John 저장소를 내려받았다.
    2. 사용하다보니 버그를 발견했다.
    3. 버그를 수정한 후, 알려주기 위해 John 저장소에 push 를 한다.
    4. 하지만 실패했다.


    실패한 이유는 나에게는 당연히 John 저장소에 쓰기 권한이 존재하지 않는다.

    이러한 경우 우리는 Fork 기능을 사용한다.


    fork


    지금 말하는 Fork 는 그림에서 보는 Fork 를 뜻한다.

    Fork 를 클릭하게 되면, 프로젝트는 본인의 저장소에 그대로 복사된다.

    그렇게 본인의 저장소에서 수정한 후, 원래 저장소(fork 대상)에게 수정사항을 알린다.

    알리는 행위를 pull request 라고 한다. (위 그림에서도 볼 수 있다)

    fork 후 기여하는 흐름을 그림으로 나타내면 다음과 같다.


    fork


    전체적인 순서는 다음과 같다.


    1. 관심있는 저장소 Fork 버튼 클릭
    2. 본인의 저장소에 복사된 저장소 내려받기
    3. Fork 설정 [Configuring a remote for a fork]
    4. Fork 동기화 [Syncing a fork]
    5. 본인 저장소에 Push 
    6. 원래 저장소에 Pull request [Creating a pull request]


    시나리오를 통해 보면 다음과 같다.

    본인이 vuejs/vue 저장소에 기여하고 싶다고 가정한다.

    우선 프로젝트를 fork 한다.


    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 를 참고하면 도움이 될 것이다.

    https://github.com/kakao/kakao.github.io

    반응형

    댓글

Designed by Tistory.