Git clone과 fork, 뭘 써야할까?
Git으로 협업을 하고 있다면 당연히 써봤을 clone과 fork 기능! 프로젝트 초기에 그라운드 룰을 정할 때면 항상 하게 되는 고민이 있다.
🤷♂️ 클론받아서 피쳐별로 브랜치 파서 main으로 PR 올릴까요?
🤷♀️ 포크 떠서 origin에서 upstream으로 PR 올리는 건 어때요?
Git Clone
clone은 원격 저장소를 로컬 환경으로 복제해오는 방법이다. 이를 통해 원격 저장소에 있는 모든 코드, 히스토리, 브랜치 등을 로컬 환경에 가져올 수 있다.
Git Fork
Fork는 다른 사람의 원격 저장소를 복제해서 내 저장소를 따로 만드는 방법이다. 즉, Fork를 한 후 내 저장소를 Clone해서 작업하게 되는 것이다.
보통 다른 프로젝트나 오픈소스에 기여할 때 Fork를 많이 사용하곤 한다. 원본 프로젝트와 완전히 분리된 환경에서 작업하여 코드를 안전하게 수정하고 실험할 수 있기 때문이다.
그렇다면 팀 프로젝트를 할 땐 어떻게 해야 할까?
Clone은 위험할 수도 있어!
클론을 사용할 경우, 모든 코드와 히스토리를 로컬 환경으로 가져와 작업할 수 있다. 즉, 접근과 수정이 자유롭다는 것이다! Fork를 사용해 작업을 하는 경우, 다른 팀원이 작업 중인 내용을 보기 위해서는 팀원의 저장소를 리모트에 추가해서 봐야한다는 번거로움이 존재한다. 따라서 페어프로그래밍을 진행할 경우, 여간 귀찮은 일이 아닐 수가 없다.
하지만 한 저장소에서 기여하는 작업자 수가 많을 경우, 브랜치 관리가 제대로 되지 않을 가능성이 있다. 릴리즈 브랜치, 여러 피쳐 브랜치들이 중구난방으로 생성되게 된다면 그것도 썩 좋은 광경은 아닐 것이다. 또 실수로 로컬 작업을 날려버렸는데 리모트에서도 작업이 날라가버렸다면? clone을 사용했을 경우 복구가 힘들 수 있지만 fork를 사용했을 경우 upstream에서 날라가더라도 내 origin에 남아있기 때문에 큰 문제가 없을 것이다. 여러모로 안정성을 생각한다면 fork가 좋은 방법일 수 있다.
그치만…!
내 개인적인 경험으로, 나의 경우 대부분 4-5인으로 이루어진 팀에서 작업을 진행했기 때문에 clone 방식을 선호하는 편이다. (주변에 보다보면 20명씩 되는 팀도 있던데… 그 경우는 겪어보질 않아서 모르겠다🤔) 그리고 실제로 위험이 발생한 적도 없다.
인원 수가 많지 않아서 그럴 수도 있다…!
1. 브랜치를 릴리즈, 도메인 별로 폴더링 해서 관리하자.
release/v1.0.0
, abc-project/ticket-123
등 브랜치를 폴더링하면 한 눈에 알아보기 쉽다. (특히 깃크라켄과 같은 GUI를 사용한다면 더더욱!)
2. 일정 주기로 리모트 저장소의 브랜치를 정리하자.
한 스프린트 단위가 끝날 때 등, 주기적으로 작업 현황을 파악하여 브랜치를 정리해주기만 해도 중구난방으로 될 가능성이 낮아진다.
어쨌거나 가장 중요한 것은 개발자의 생산성이다. 개발자로서 신경써야 할 것은 UX만이 아니다. DX(Developer Experience)도 신경써야 한다!
개발자 건강은 개발자가 챙기자..
Clone할 건지 Fork할 건지에 대한 고민 이상으로, 협업에서는 그보다 더 어렵고 다양한 고민들이 발생한다. 어쩌면 정답이란 건 없을지도.. 현재 처한 상황에서 팀원들이 불편함 없이 효율적으로 협업을 진행할 수 있는 방안을 찾는 것이 최선이라 생각한다 :)
B
u
y
M
e
A
C
o
f
f
e
e
☕
️