본문 바로가기
프로그래밍/Git

github 리포지토리 포크(fork)하기

by 신나요 2022. 9. 20.

포크(Fork)란?

포크는 리포지토리(저장소)의 복사본입니다. 따라서 실제로 기존 리포지토리의 복사본에 불과합니다. 포크를 사용하면 원본 리포지토리에 영향을 주지 않고 복사본을 변경할 수 있습니다.

포크를 생성할 떄 복사본은 기본적으로 원래 리포지토리에 연결된 상태를 유지하므로 원본 리포지토리에 업데이트가 있는 경우 변경사항도 포크에 가져올 수 있습니다. 그 반대의 경우도 가능합니다. 포크를 생성했다면 포크에서 pull request를 생성해서 변경사항을 선택적으로 원본 리포지토리에 병합할 수 있습니다.

포크는 모든 사람이 사용할 수 있습니다. 포크를 생성하면 해당 포크는 이제 자신의 저장소가 되며 완전히 직접 관리할 수 있습니다. 포크는 아이디어를 테스트하기 위해 만들곤 합니다.

 

깃 허브 포크 이해하기

github에서 포크가 작동하는 방식을 그림으로 살펴보겠습니다.

원본 리포지토리에서 내 계정의 리포지토리로 fork를 사용해 복사를 해옵니다. Fork를 통해 github 리포지토리 사본을 만들었고 이제 그 사본이 내 입장에서는 원본이 됩니다. 이 복사 repo는 내 자신의 저장소이므로 이제 로컬로 clone해와서 작업을 할 수 있습니다. 로컬에서 작업이 이루어지고 fork로 푸시됩니다. 복사본 repo로 푸시한 변경사항은 자동으로 원본 repo에 반영되지 않습니다. 원본 repo에 반영할 만큼 좋은 업데이트라면 원본 저장소에 pull request를 요청하게 됩니다. 원본 repo의 소유자는 pull request를 검토하고 원본에 업데이트를 할지 결정하게 됩니다.

 

물론 아래와 같이 단일 리포지토리에서 여러 포크를 생성할 수 있습니다.

하나의 리포지토리를 여러개로 포크가능

 

 

Github Fork 만들기

github에서 fork를 생성하는 과정을 살펴보겠습니다. 예제로 fork할 리포지토리는 angular리포지토리입니다. 아래 github의 angular 리포지토리를 표시하고 있습니다.

22.2k번 포크된 angular

Fork 버튼을 누르면 내 리포지토리로 angular 리포지토리를 복사해올 수 있습니다. 이미 22,200번 포크가된 리포지토리임을 알 수 있습니다.

 

포크 버튼을 누르면 아래 화면이 표시됩니다.

포크 생성 화면

포크를 생성하는 화면에서 리포지토리 이름을 지정할 수 있습니다. 또한 복사를 해올 때 모든 브랜치 이력을 가져올지 main브랜치만 가져올지 선택할 수 있습니다. 설정을 한 후 Create fork버튼을 누릅니다.

 

fork를 통해 아래와 같이 리포지토리를 복사해왔습니다.

복사를 해왔지만 angular/angular에 연결되있음을 알 수 있습니다. 복사해온 이 리포지토리는 자유롭게 개인이 테스트할 수 있는 angular의 사본입니다. 포크 생성 시점에 원래 저장소의 main의 전체 기록이 복사해온다는 점이 중요합니다. 포크 생성화면에서 봤듯이 포크를 만들 때 main 브랜치만 가져올지 리포지토리의 모든 브랜치를 가져올지 선택할 수 있습니다.

 

커밋을 선택해서 클릭해보면 아래와 같이 표시됩니다.

main브랜치에서 커밋된 모든 내용을 볼 수 있으며, 정확한 복사본임을 확인할 수 있습니다.

 

포크는 독립적인 복사본이기 때문에 복사해온 저장소에서 우리는 자유롭게 테스트를 할 수 있습니다. 원한다면 포크에서 원본 리포지토리로 pull request를 생성해서 fork에 변경된 사항을 적용할 수 있습니다. 실제로 오픈소스로 진행되는 프로젝트의 맴버들은 fork를 사용해 프로젝트를 진행하곤 합니다.

우리 개인 개발자들은 오픈된 리포지토리를 fork 해와서 공부를 할 수 있습니다. 또는 더 나은 기능을 추가하거나 버그를 수정할 수 있습니다. pull request가 받아드려 진다면 해당 리포지토리에 공헌할 수 있을 것입니다. 개발자로서 뿌듯함은 덤입니다:)


여기까지 수고하셨습니다.

댓글