본문 바로가기

GIT

2. Fork 와 clone 의 차이점

Fork 

 

GitHub에서 오픈소스 프로젝트에 기여하거나, 협업을 진행할 때 fork를 이용하게 된다. fork는 다른 사람의 repository를 내 소유의 repository로 복사하는 일이다. 따라서 원래 소유자의 remote repository와 내가 fork한 remote repository 사이에도 upstream 과 downstream이라는 관계가 형성된다. 그래서 보통 원래 소유자의 remote를 말할 때 upstream, 내가 포크한 remote를 말할 때 origin 이라는 용어를 사용한다. 

 

1. local과 origin의 관계에선 local이 downstream, origin이 upstream이었는데,

2. fork한 repository를 기준으로 보면 origin이 downstream, 원본 remote가 upstream 이라는 관계가 된다. 

 

그래서 GitHub 로 협업을 할 때는 다음과 같은 과정을 거친다고한다.

 

1. '원본 remote repository' (upstream)을 GitHub에서 fork

 

2. 'fork 한 remote repository' (origin)을 Git Client로 clone

 

3.

- (1) 'clone한 repository' (local) 에 commit

- (2) local에서 origin으로 push

 

윗 과정을 반복하다가

 

4. upstream에 반영하기 전 

- (1) PR을 등록하기 전 upstream에 바뀐 내용이 없는 경우 

       (a) origin 에서 upstream 으로 PR(Pull Request)

   

- (2) PR을 등록하기 전 upstream에 바뀐 내용이 있는 경우 

      (a) upstream을 local로 pull

      (b) local에서 origin으로 push

      (c) origin에서 upstream으로 PR(Pull Request)

 


 

Fork를 하는 이유 

 

A라는 사람이 개발하던 저장소에 B라는 사람이 협업을 한다고 가정해보자.

 

그렇다면 A라는 사람의 저장소를 B라는 사람이 git clone을 하여 코드를 수정하고 push를 할 경우 코드에 오류가 있다면 큰 문제가 발생할 수 있다. 이를 방지하기 위해 Fork 를 한다.

 

원본 프로젝트를 Clone 하는 것이 아니라 그 프로젝트를 Fork를 하여 복제된 프로젝트에서 작업을 하고 해당 작업을 원본 프로젝트에 반영해달라고 PR을 보내는 것이다.

 


 

Forking과 Cloning의 차이점 

 

Forking 

repository를 fork 할 때 원본 repository( = upstream) 의 복사본을 생성하지만, repository는 GitHub 계정에 남아있다. 

 

Clone 

repository가 Git의 도움으로 로컬 장치에 복사된다.

 

 

 


 

GitHub 에서 포크/클론 을 사용할 때 프로세스 차이

 

  • 포크 없이 클론만 할 때 

- 1단계 : 저장소 복제 (git clone)

 

사용자는 GitHub의 업스트림 저장소에서 시작한다. 이 프로세스는 저장소를 로컬 시스템에 clone 할 때 시작된다. 이제 로컬 장치에 프로젝트 파일의 사본이 있어 변경을 수행한다.

 

- 2단계 : 원하는 내용 변경

 

clone 후 기여자는 자신이 작성한 코드를 저장소에 제공한다. 이 단계에서 기여자는 커밋을 저장소에 적용할 수 있다. 그러나 이 모든 것이 로컬 시스템에서 발생한다는 것이다.

 

- 3단계 : 변경 사항 push

 

변경 사항 또는 커밋이 완료되면 수정 사항을 업스트림 저장소로 push 할 수 있다.

 

 

 

  • 포킹 후 Git Repo 복제

- 1단계 : forking

 

사용자는 GitHub의 업스트림 리포지토리에서 시작한다. 이는 fork 에서 시작된다.

 

- 2단계 : 저장소 복제 

 

- 3단계 : 원하는대로 변경

 

- 4단계 : 변경 사항 push

 

- 5단계 : 원본 repository로 변경 사항 보내기

 

이 프로세스를 Pull Request 라고 한다. 이 단계에서 사용자는 변경 사항을 기본 중앙 저장소에 병합하라는 요청으로 저장소 소유자에게 변경 사항을 보낸다. 저장소 소유자는 코드를 확인한 후 PR 수락 여부를 결정한다.

 

 


 

✅ 출처 

 

https://dejavuhyo.github.io/posts/difference-between-git-clone-and-git-fork/

 

Git Clone과 Git Fork의 차이점

1. Forking과 Cloning의 주요 차이점 Forking은 GitHub 계정에서 수행되고 복제는 Git을 사용하여 수행된다. 리포지토리를 포크할 때 원본 리포지토리(업스트림 리포지토리)의 복사본을 생성하지만 리포

dejavuhyo.github.io

 

'GIT' 카테고리의 다른 글

3. 헷갈리는 용어 정리  (0) 2022.05.07
1. remote repository 와 upstream  (0) 2022.05.06