기본적으로 Git은 로컬 저장소와 원격 저장소간의 동기화를 위해 master 하나에 git add, commit 을 통해 협업 한다. 그러나 프로젝트의 규모가 커지고 협업하는 동료들이 많아진다면 이슈에 따라 다양한 branch를 통해 다양한 인원이 독립적으로 개발이 가능한 전략이 필요하다.
git-flow 전략은 소프트웨어의 소스코드를 관리하고 출시하기 위한 '브랜칭 관리 전략branch management strategy’이다. 꽤 오래전에 나온 전략이며 이 전략의 단점을 극복하기 위해 github flow와 gitlab flow 전략이 나왔다.
Git flow 는 프로젝트 규모가 커지고 협업하는 동료들이 많아짐에 따라 효율적으로 프로젝트를 관리하고 배포하기 위한 전략이다. 이슈에 따라 다양한 branch를 통해 독립적으로 개발이 가능하고, 관리하여 통합하기 용이하다.
Git Flow의 주요 브랜치는 master와 develop 이며, 이 두 브랜치를 중심으로 feature, release와 필요에 따라 hotfixes 브랜치를 정의한다.
master 브랜치에 merge된 내역은 새로운 버전이 갱신되었다는 것을 의미한다. 즉 master 브랜치에 변경 내역이 생기면 최종 버전인 Tag를 통해 Production에 배포된다.
hotfix를 제외한 모든 변경내역이 출발하는 지점이다. develop 브랜치의 코드가 안정화되고 배포할 준비가 되면 master를 통해 배포 버전의 태그를 단다.
feature 브랜치는 배포하려고 하는 기능을 개발하는 브랜치다. 기능을 개발하기 시작할 때는 언제 배포할 수 있을지 알 수 없다. 기능을 다 완성할 때까지 유지하고 있다가 다 완성되면 develop 브랜치로 병합한다.
release 브랜치는 실제 배포할 상태가 된 경우에 생성하는 브랜치다.
미리 계획되지 않은 브랜치다. 기본적인 동작방식은 release와 비슷하다. 배포 이후에 생긴 치명적인 버그는 즉시 해결해야하기 때문에 문제가 생기면 master 브랜치에 만들어둔 태그tag로 부터 긴급수정을 위한 브랜치를 생성한다.
git fork는 git 에서 내 레파지토리로 복사 해서 클론하는 것을 말한다. 외부 다른 프로젝트를 내 레파지토리에 그대로 갖고 오는 것이기 때문에 커밋하고 푸쉬하여도 내 레파지토리에서 먼저 머지를 하고 진짜 리모트에 pr 를 할 수 있다.
git remote add upstream 주소
git fetch upstream master
git push origin branch이름
git push upstream master
원격저장소로부터 파일을 갖고 오는 것은 같다.
하지만, pull 은 갖고 와서 바로 내 로컬 마스터에 병합이 되고,
fetch는 마스터에 병합은 되지 않는다. 후에 rebase or merge를 통해 병합해 주어야 한다.