GIT Fork 를 왜사용하지?
초보 개발자가 입사를 했고 한명의 시니어가 프로젝트를 관리 했다. 일을 하면서 생각하지 않았던 점인데.. 왜 frok를 사용했을까? 실제로 지금은 fork를 하지 않고 개발을 하고 있다.
frok란 무엇일까?
'fork'라는 단어를 봤을 때 일반적으로 음식을 먹을 때 사용하는 포크가 생각났다. 정답이다. 실제로 git의 fork를 사용했을 때 포크처럼 여러 갈래로 뻗어나가는 모습과 유사하다.
git 에서 fork는 무엇일까?
그렇다면 왜 fork를 사용했을까?
초보 개발자가 직접 원본 코드에 문제를 유발 시킬 수 있기때문에 우리에 대한 배려가 아니었을까 추측한다.
fork를 하고 repository를 만들어서 git을 사용했던 방식
내 계정에 fork된 프로젝트에서 작업 PR(Pull Request)로 기여
환경 설정
프로젝트 repository -> fork를 뜬다 fork뜬 저장소를 clone받음
local에 remote저장소의 이름을 upstream 으로 변경하고 local에 reomote저장소에서 내용을 변경
(0) git pull 했을떼 git pull origin master
(1) git push origin master git push
커멘트 명령을 입력했을 때 누구한테 push 되는 걸까?
(2) merege 와 rebase를 비교하기
fork 사용하지 X 기존 프로젝트를 clone
기존 프로젝트를 git clone 하고 직접 origin에 push/pull
fork 를 했을 때 문제점?
"내 저장소이기 때문에, 다른 사람이 접근하거나 브랜치를 공유해서 함께 개발할 수 없다." → 결국 팀 협업에는 불편하며 오픈소스나 외부 기여에 더 적합함
- 권한 제한 : 다른 사람이 내 fork된 저장소에 push할 수 없음 (협업 어려움)
- 업데이트 불편 : 원본 저장소의 최신 변경 사항을 주기적으로 upstream 설정 후 pull해야 함
- 브랜치 공유 어려움 : 동료와 같은 브랜치를 함께 작업하기 어려움 (같은 원격 저장소가 아님)
- PR만으로만 협업 : 협업 흐름이 오직 PR을 통한 리뷰/병합으로만 가능
- 다중 저장소 관리 복잡 : origin(fork된 내 저장소) + upstream(원본) 두 개를 관리해야 함
- 권한 없는 팀 협업에 불리 : 개인 작업엔 적합하지만 팀 협업이나 공동 push에는 비효율적
비교
항목 | fork 방식 | 직접 clone 방식 |
---|---|---|
저장소 위치 | 내 GitHub 계정 아래 복사본 | 원본 저장소 사용 |
권한 | 본인만 push 가능 | 팀원 모두 push 가능 (권한만 있다면) |
협업 방식 | PR 위주 (GitHub flow) | 브랜치 기반 협업 (Git flow 등) |
최신화 방식 | upstream → fetch/merge | 바로 pull 가능 |
추천 상황 | 외부 오픈소스 기여 | 사내 프로젝트, 팀 개발 등 |