개발자 10명이서 브랜치를 대충 아무렇게나 만들면 개발과정이 매우 복잡해지고 추적도 어려워서,
git branch 깔끔하게 만들도록 도와주는 방법론같은게 있습니다.
Git Flow, Github Flow, Gitlab Flow, Trunk-based 등 다양한 것들이 있습니다.
이런걸 적용하면
그래서 프로젝트 리드하는 사람들이 알면 좋습니다.
님들이 만드는 프로그램이 항상 안정적인 release를 해야한다면, (e.g. 게임개발) Git Flow 전략을 쓰면 됩니다.
Git Flow 전략(by Vincent Driessen)은 크게 5개 브랜치를 운영합니다.
maindevelop : 개발용feature : develop에 기능 추가용hotfix : main 브랜치 버그 해결용release : (develop 브랜치를 main 브랜치에 합치기 전에 최종 테스트용게임개발을 예시로 들면, 이제부터 여러분은 게임개발 팀장입니다.
신기능 개발해서 바로 main브랜치에 합칠 것입니까? 절대 안됩니다. 신입 개발자들을 믿을 수 없습니다.
신기능을 만들고 싶으면 develop 브랜치를 복사한 feature 브랜치에서 각각 개발합니다.
feature/guild 브랜치 만들어서 길드기능 만들고
feature/friend 브랜치 만들어서 친구기능 만들고 하면 됩니다.
feature(기능)들이 어느정도 완성되면 develop 브랜치에 merge 합니다. 중요한 내용이 아니면 squash and merge도 괜찮습니다.
develop에서 만든 2개 기능들이 완성된 것 같습니다.
이걸 바로 main 브랜치에 합치기엔 또 불안하기 때문에
develop -> release 브랜치 이렇게 프로젝트를 복사한 다음 출시준비를 합니다.
완성된 것 같으면 main 브랜치로 merge 합니다.
그리고 그거 유저들에게 배포하면 됩니다.
개발은 계속 진행되어야하니 완성본은 develop 브랜치에도 merge 해줍시다.
1.0 버전에서 갑자기 골드 무한복사 버그를 발견했습니다.
그런 급한 것들은 main 브랜치에서 hotfix 이런 브랜치 하나 만들어서 바로바로 버그수정하면 됩니다.
그래서 맨날 남들이 하는거 따라하지 말고 본인 마음대로 변형해서 쓰면 됨.
예를 들면, release 브랜치 쓰지 않고 바로 main 브랜치에 merge 해서 배포하거나 그래도 됩니다
그 선택에 합당한 이유와 근거가 있으면 됩니다. 물론 책임도 져야합니다.
만드는게 코드짠걸 바로 대중에 배포를 해도 상관없는 프로그램이면,
그리고 크게 대격변 업데이트를 안하는 안정적인 프로그램이면
굳이 많은 브랜치를 만들 필요가 없습니다. 그냥 main 브랜치와 기능추가용 feature 브랜치만 운영하면 됩니다.
이게 Trunk-based 전략입니다. Github Flow도 이거랑 비슷합니다.
이미 어느정도 개발이 진척이 되었거나 프로들로 가득한 팀이면 Trunk-based 이런거 쓰는게 훨씬 편리합니다.
최근 유행한 CI/CD 이런 식으로 개발하는 곳들도 Trunk-based 개발방식을 적용합니다.
출시 버전의 안정성이 중요한 프로그램, 아직 뼈대가 확실하지 않아 연구식으로 개발하는 프로그램들은 Git Flow가 적절할 수 있습니다.
Q. merge 할 때 어떤 방법 쓰는게 좋은가요?
취향일 뿐이고 알아서합시다.