본문 바로가기

Project Management/Git & Github

[Chapter 4] 복수의 repository로 협업(1) - fork 1

github logo image

 

 

 

지금부터는 기존에 우리가 만들어 실습을 진행해 온 원격 저장소(repository)를 '원본 저장소'로 통칭해서 부르도록 하겠습니다. 이제는 다음과 같은 상황을 가정할 것이기 때문입니다 - 지금 우리가 원본 저장소를 통해 어떠한 프로젝트를 진행하고 있는데, 외부 인력이 해당 프로젝트에 참여할 예정입니다 - 이제 우리가 작업해 온 원본 저장소에 외부 인력이 직접 접근하여 브랜치를 생성하거나 마스터 브랜치에 커밋을 직접 진행하는 상황은 막아야 하겠죠? 

 

일단 참고로 설명드리면, 기본적으로 원본 저장소(repository)에 접근해 커밋을 진행할 수 있는 권한은 소유자가 원본 저장소의 [Settings] 탭의 [Collaborators] 메뉴에서 해당 계정을 추가해야만 합니다.

 

특정 저장소에 접근할 수 있는 인원을 초대해야 합니다

 

 

 


 

 

여기서 설명하는 원본 저장소를 통째로 복제하여 다른 사용자가 사용하게 되는 것을 포크(fork)라고 표현합니다. 예를 들어 외부 협력자가 원본 저장소를 통째로 복사하여 코드 개발 작업을 진행한 다음, 원본 저장소 소유자에게 풀 리퀘스트(pull request)를 보내 검토를 진행하고 안전하게 병합하여 반영하는 것을 의미합니다. 

 

그런데 브랜치 작업과 동일한 것 아니냐고요? 어느 정도는 맞습니다. 하지만 브랜치를 진행하는 것은 내부에서 관리가 가능한 수준의 프로젝트에서 활용하는 방안입니다. 만일 구글이나 메타에서 운영하는 오픈 소스 프로젝트라면 여기에 기여하고자 하는 사람들의 숫자가 엄청나게 많을 것입니다. 많으면 몇 천명 단위가 되기도 하지요. 이를 일일이 브랜치로 관리한다면, 현실적으로 안정적인 운영이 불가능할 것입니다. 

 

이렇게 평행세계(브랜치)가 아닌 평행우주(포크)를 만들어 운영하는 경우는 수많은 외부인이 프로젝트에 참여해도 안정적으로 운영이 가능하고, 원본 저장소에 영향을 미치지 않기 때문에 외부 컨트리뷰터의 참여가 위험하지 않습니다. 다만, 여기에도 단점은 있습니다. 바로 원본 저장소의 브랜치나 사용자가 아니기 때문에 해당 외부 사용자의 이력을 별도로 등록하지 않으면 볼 수 없다는 점이죠.

 

 

 


 

 

지금부터는 기존에 작업을 진행한 github.com 계정 외의 "새로운" 계정이 필요합니다. 기존 사용하던 계정과 다른 별도의 gmail 계정 등을 이용해 github에서 가입절차를 진행해 줍니다. 

 

새롭게 만든 계정으로 github에 로그인 했나요? 저는 github에 처음 만든 새로운 계정이어서 아무것도 없는 상태네요. 좌측 상단에 있는 [Search or jump to...] 검색창을 클릭해 기존의 원본 저장소로 이동해 보겠습니다. 잊지 마세요! 지금은 우리는 기존 계정이 아닌 완전히 새로운 계정으로 작업을 진행하고 있습니다. 

 

새로운 계정으로 기존 gitstudy 원본 저장소에 접근했습니다

 

 

 

이제 여기서 우측 상단의 [Fork]를 클릭해 포크 작업을 시작합니다. 아래와 같이 화면이 출력됩니다. 새로운 사용자를 기반으로 repository가 생성됩니다. 일단, 'Copy the master branch only'는 체크 해제하고, [Create fork] 버튼을 클릭합니다.

 

 

 

 


 

 

새로운 사용자의 github에도 gitstudy라는 원격 저장소가 생성되었습니다. 원본 저장소와 브랜치부터 커밋 내용까지 모두가 똑같이 복사되었고, 잘 살펴보면 해당 원격 저장소는 원본 저장소 어디에서 포크 되었는지도 표시됩니다. 

 

새로운 사용자의 저장소에 원본 저장소가 포크 되었습니다

 

 

이제 해당 원격 저장소는 xxxx(새로운 사용자)/gitstudy로 원본 저장소와 별개의 주소가 생성되었습니다. github상에서 작업이 완료되었으니, 이제 원본 사용자 소유자는 [ME], 그리고 새로운 사용자는 [NEWBIE]로 통칭하고 다음 아티클에서부터 NEWBIE가 자신의 PC에 로컬 저장소를 생성하고 소스트리에서 사용이 가능한 환경까지 세팅해 보도록 하겠습니다.