ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Github] Pull Request를 통하여 프로젝트에 기여하기
    Github/Github 2020. 10. 22. 02:38
    728x90
    반응형

    이번 글에서는 다른 사람의 레포지토리에 Pull Request를 보내는 방법에 대해서 소개하려 한다.  먼저 Github에 들어가서 본인이 Pull Request를 보내고 싶은 레포지토리에 들어가보자.

     

     나는 SOPT-SERVER-WIKI라는 레퍼지토리에 pull Request를 보낼 것이다. 그러기 위해서는 먼저 해당 레포지토리를 Fork를 한 후에 자신의 Github으로 복사를 하자. 

     

    그러면 본인의 Github 저장소에 위와 같이 만들어진 것을 확인할 수 있다. 그리고 이제 해당 프로젝트를 자신의 로컬 PC에 Clone을 받아서 작업을 진행해보자. 

     

    위와 같이 Code를 누른 후에 뜨는 화면에서 복사버튼을 누르면 주소가 복사가 된다. 

    위와 같이 git clone을 이용해서 복사한 주소를 뒤에 넣으면 해당 레포지토리의 프로젝트를 자신의 로컬 PC로 다운받을 수 있다. 

     

    이제 해당 프로젝트를 열어서 간단하게 수정을 한 후에 pull Request를 보내보자. 필자는 VsCode를 이용해서 수정을 하려 한다. 

    (간단하게 README.md 파일을 수정할 예정이다)

     

    위와 같이 "-질문" 이라는 것을 추가했다고 가정하자.

     

    그리고 터미널에서 아래의 명령어를 치자.

    git add .
    git status
    git commit -m "원하는 커밋메세지"
    git push origin master 

    그러면 아까 Fork했던 자신의 Github 레포지토리에 수정사항이 반영되었을 것이다. 이제 수정된 사항을 원래 레포지토리에게 pull Reqeust를 보내면 된다. 

     

    그리고 Fork한 레포지토리에서 위의 순서대로 버튼을 눌러보자.

     

    그리고 또 compare across forks를 누르자. 이번 글에서는 파일 수정한 것을 커밋하지 않고 보내는 방법만 설명하는 것이기 때문에 위의처럼 "0 changed files"가 뜨는 것이니 참고하면 좋을 것 같다.

     

    이 때 화살표 방향이 중요하다. ON-SOPT-SERVER/SOPT-SERVER-WIKI    <------- {깃허브 아이디}/SOPT-SERVER-WIKI 이 방향에 되게 만들자. 그리고 마지막으로 Create pull request 버튼을 누르자. 

     

    그리고 다시 한번 Create pull request를 누르면 이제 pull request를 보낸 것은 성공이다.

    요청하면 충돌이 발생하지 않을 수도 있지만, 위와 같이 충돌이 날 수도 있다. 나는 A버전의 레포지토리를 clone을 받아서 작업을 했는데, 그 사이에 많은 사람들이 해당 레포지토리에 pull request를 날려서 Merge가 되면 Code가 업데이트가 되기 때문에 같은 파일의 같은 곳을 수정하게 되었다면 충돌이 발생하는 것이다. (만약 위와 같이 충돌이 발생했다면 Resolve conflicts를 이용해서 충돌이 난 부분을 해결해주면 된다)

     

     

    그리고 git에서 remote는 우리의 로컬 저장소와 깃허브에 존재하는 원격 저장소를 연결해주는 통로라고 생각하면 된다. clone을 받으면 자동적으로 origin이 생기기 때문에 위의 사진을 볼 수 있다. (포크한 나의 Github 원격 저장소와 로컬 저장소가 연결된 것이다)

     

    이제 Github 포크를 했던 원본 레포지토리와 나의 로컬 저장소를 연결해보자. 

    필자는 upstream이라는 remote를 만들었고 이 remote는 깃허브에 있는 포크했던 원본 remote 레퍼지토리에 연결이 된다. 그러면 위와 같이 origin과 upstream을 확인할 수 있다. upstream remote를 생성한 이유는 원본 레포지토리가 수정이 되었을 때 로컬 저장소를 최신화 시키기 위해서이다. 

     

    무슨말인가 하면 현재 A라는 레포지토리를 B와 내가 포크를 했다고 가정해보자. 이 때 B가 먼저 A 레포지토리에 pull request를 보낸 후 Merge가 되었다면 나의 로컬 저장소에는 Merge가 되어 최신 상태인 원격 레포지토리 A의 상태가 반영이 되지 못한다. 그럴 때 아래의 명령어를 사용해서 최신화 시키면 된다.

    git pull upstream 브랜치이름
    반응형

    댓글

Designed by Tistory.