본문 바로가기

IT/Git

[Git] clone과 fork 차이점

git을 push하는데 기존의 repository의 내용이 담겨있어야 한다는 것을 이해하지 못했다. 그래서 git init,

git remote add까지는 했지만 처음 시작을 깨끗한 상태에서 한 것이 아니라 그냥 내가 push하길 원하는 파일 이외에도 각종 잡다한 파일이 모두 들어있는 저장소였던 것이다. 

 

git clone과 git fork의 차이점을 보면서 아, 내가 뭔가 잘못생각하고 있었구나!를 깨달았다.

 

fork

fork는 다른 사람의 Github repository에서 내가 어떤 부분을 수정하거나 추가 기능을 넣고 싶을 때 해당 respository를 내 Github repository로 그대로 복제하는 기능이다. fork한 저장소는 원본(다른 사람의 github repository)와 연결되어 있다. 여기서 연결 되어 있다는 의미는 original repository에 어떤 변화가 생기면(새로운 commit) 이는 그대로 forked된 repository로 반영할 수 있다. 이 때 fetch나 rebase의 과정이 필요하다.

 

 

 

그 후 original repository에 변경 사항을 적용하고 싶으면 해당 저장소에 pull request를 해야한다. pull request가 original repository의 관리자로 부터 승인 되었으면 내가 만든 코드가 commit, merge되어 original 에 반영된다. pull request 하기 전까지는 내 github에 있는 forked repository에만 change가 적용된다.

즉 Repository에 권한이 없는 사용자가 저장소를 fork하고 fork한 자신의 저장소에 변경 사항을 적용한 후 Push한다. 이 후 원래 저장소(original repository)에 내 저장소에 있는 브랜치를 Pull Request 한다. 내가 만든 코드가 ㅇㅋ되면 해당 저장소에 Merge 된다.

 

 

clone

clone은 특정 repository를 내 local machine에 복사하여 새로운 저장소를 만든다. clone한 원본 repository를 remote 저장소 origin으로 가지고 있다. 권한이 없는 경우 해당 저장소로 push 하지 못한다.

또한 기존의 제일 처음 original repository와 연결되지 못한다. 즉 저장소의 commit, 등의 로그를 보지 못함

나(imacoolgirlyo)와 칭구(chingu)가 팀 프로젝트를 진행하기 위해서 github에 새로운 repository를 하나 만들었다. 각자 자신의 컴퓨터에 해당 저장소를 clone하여 작업한다. 변경 사항들을 commit 하고 chingu가 먼저 github remote 저장소에 push를 했다.

그 후 내가 push를 시도하지만 하지 못하게된다.

 

칭구가 먼저 push 후 origin/master에 변경 사항을 적용하였기 때문에 해당 변경 사항을 내 로컬에서도 적용하기 위해서 칭구가 수정한 커밋을 Fetch하고 Merge 해야한다.

 

 

 

Git fork와 clone 의 차이점

Forking a Repository - How to Use Git and GitHub 내용을 참고했습니다. fork fork는 다른 사람의 Github repository에서 내가 어떤 부분을 수정하거나 추가 기능을 넣고 싶을 때 해당 respository를 내 Github repository로

velog.io

 

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

[Git] commit 옵션  (0) 2021.03.05
[Git] git pull (fatal: refusing to merge unrelated histories) 에러  (0) 2021.03.05
[Git] commit 목록 확인  (0) 2021.03.05
git status 개념  (0) 2020.11.07
git stash  (0) 2020.10.06