ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] fork 후 작업하기
    CS/Git 2022. 4. 9. 02:51
    반응형

    fork 와 clone 의 차이점

    fork

    fork 는 다른 사람의 repository 에 내가 어떤 부분을 수정하거나 추가하고 싶은 경우에 해당 repository 를 내 계정의 repository 로 복제하는 기능이다. 이때, fork 해온 저장소는 원본 저장소와 연결되어 있어서 fetch, rebase 등을 통해 원본 저장소의 변경 사항을 내 저장소에 반영할 수 있다.
    이후 내 저장소에서 작업을 진행한 후 변경 사항을 원본 저장소에 적용하고 싶으면 해당 저장소에 Pull Request(PR) 을 해야 한다. PR 이 원본 저장소의 관리자로부터 승인되면, 나의 변경 사항이 원본 저장소에 commit, merge 되어 반영된다. PR 이 승인되기 전까지는 변경 사항이 fork 한 내 저장소에만 존재한다.

    clone

    clone 은 특정 원격 repository 를 내 로컬 작업공간에 복사하여 새로운 저장소를 만든다. 로컬 저장소는 원본 repository 를 remote 저장소 origin 으로 가지고 있다. 이때, clone 한 개인은 권한이 없는 경우 해당 저장소로 push 하지 못한다. 권한이 있는 경우, push 할 경우 변경 내역이 원본 저장소로 바로 반영된다.

     

    Fork 하기

    1. 먼저 fork 할 원본 저장소로 이동한다.

    2. fork 버튼을 클릭하면 내 계정에 forked 된 저장소가 생성된다.

    3. 내 저장소에 생성된 repository 를 clone 하여 로컬 작업환경을 만든다.

    $ git clone https://github.com/...

    4. Remote 설정
    clone 후에는 origin 이라는 remote 가 생성되는데, 이건 내가 Fork 한 프로젝트이다. 여기서 pull 로 변경 내역을 받으면, 원본 프로젝트에서 받는 게 아니라 Fork 된 내 프로젝트의 변경 내역을 받게 된다. 원본 저장소의 변경 내역을 파악하여 원 저자와의 중복 작업을 피하고 예전 소스를 수정하는 일이 없도록 원본 저장소의 정보를 remote add 로 추가한다. (upstream 이라는 이름으로 등록하였다)

    $ git remote add upstream http://github.com/...

    5. 원본 저장소의 변경 내용을 가져오려면 pull, fetch 를 수행한다. pull 과 fetch 의 차이점은 fetch 는 merge 를 수행하지 않는다는 점이다.

    $ git fetch upstream

    이후 생성한 로컬 저장소에서 작업을 진행한다.

    작업 내​용 반영하기

    Fork 한 프로젝트에서 진행한 작업을 원본 저장소에 반영하고 싶으면 아래 과정을 따르면 된다.

    1. 로컬 저장소에서 작업한 내용을 commit, push 한다. (이때, 변경 내역은 원본 저장소가 아닌, Fork 한 개인 저장소에 반영된다.)

    $ git add .
    $ git commit -m "message"
    $ git push origin master

    2. 원본 저장소의 관리자에게 내 작업내용을 Pull Request 로 보낸다.
    push 를 하고 나서 내 계정의 Fork 된 repository 를 들어가보면 아래와 같은 버튼이 활성화되어 있을 것이다.

    compare & pull request 버튼을 눌러 pull request 를 작성한다. (어떤 기능을 어떻게 수정했는지 자세하게 적어준다.)

    3. Reviewers 가 PR 을 검토한 후 review 를 달아주거나, 문제가 없고 좋은 코드라면 관리자 권한을 가진 사람이 merge 해주면 원본 저장소에 내 작업 내역이 반영된다.

    반응형

    'CS > Git' 카테고리의 다른 글

    [Git] Git 으로 작업하기  (0) 2022.04.09

    댓글 1

Designed by Tistory.