[Git] Git Fork & Clone (+Upstream)
외부 저장소인 깃허브, 깃랩 등 다른 사람의 레포지토리를 가져오든 내 레포지토리를 로컬 PC로 가져오기 위해선 포크(Fork)와 클론(Clone)의 개념이 중요하다. 그러기에 두 개념에 대한 개념을 정리해봤다.
Fork
fork는 다른 사람의 Github 레포지토리에서 내가 어떤 부분을 수정하거나 추가 기능을 넣고 싶을 대 해당 레포지토리를 내 Github 레포지토리로 그대로 복제하는 기능이다.
fork한 레포지토리는 원본 레포지토리와 연결되어 있기 때문에 원본 레포지토리에서 반영 받을 수 있다. 이때 fetch, pull의 과정이 필요하다. 이후 fork한 레포지토리 변경사항을 원본 레포지토리에 반영하고 싶을 경우엔 원본 레포지토리에 pull request를 보내야한다. pull request가 원본 레포지토리의 관리자로부터 승인 된다면 fork한 레포지토리에서 변경한 사항이 원본 레포지토리에 commit, merge 되어 반영된다.
그렇기 때문에 pull request 전까지 변경사항은 fork한 레포지토리에만 적용된다.
정리하자면, 원본 레포지토리에 대한 권한이 없는 사용자가 원본 레포지토리를 fork하여 자신의 저장소에서 수정 및 변경할 수 있으며 변경된 내용을 원본 레포지토리에 반영하고 싶을 경우엔 원본 레포지토리로 pull request를 보내서 원본 레포지토리의 관리자로 부터 승인이 날 경우 fork한 레포지토리에서 변경한 내용이 원본 레포지토리에 반영된다.
Clone
clone은 특정 원격 레포지토리와 사용자의 로컬 PC를 연결해서 레포지토리 데이터를 복사하여 가져오는 기능이다. clone 유형은 간단하게 2가지 유형으로 나눌 수 있다.
1) 원격 저장소에 사용자가 만든 레포지토리를 사용자의 PC와 연결하여 데이터를 복사하는 방법
2) 다른 사용자가 만든 레포지토리를 자신의 원격 저장소에 fork한 뒤 연결된 PC에 데이터를 복사하는 방법
Upstream
다른 사람의 Github 레포지토리를 fork한 경우 내 Github가 origin이 된다. 그리고 처음 fork를 시도한 원본 레포지토리를 upstream이라고 부른다. origin과 upstream 모두 remote 저장소 이다. 보통 origin과 구분하기 위해서 upstream이라는 명칭을 주로 사용한다.