깃 플로우 관련질문
조회수 712회
깃플로우 관련해서 질문드립니다
일단 제가 이해한바로
테스트서버 배포용 -> dev 브랜치
개발자개별브랜치 -> 피처 브랜치
운영배포용 -> prod 브랜치
운영배포예정 -> 릴리즈 브랜치
이렇게 브랜치가 나눠지는걸로 아는데요
여기서 궁금한게
1번질문 :
- 피처브랜치를 dev 브랜치로 머지후 테스트한다
- 운영배포할 릴리즈 브랜치를 생성한다
- 릴리즈 브랜치를 prod브랜치로 머지하여 운영배포한다
이 순서가 맞을까요?
2번질문 : 피처브랜치를 dev브랜치로 머지시 기존 피처브랜치는 삭제되나요?
3번질문 : 2개의 피처브랜치 a,b가 각각존재한다고 했을때 둘다 dev로 머지 이후 그중 a 브랜치만 운영배포를 한다고 하면 어떤식으로 하면되는건가요?
4번질문 : 부득이하게 dev브랜치에서 다시 prod브랜치 소스를 땡겨와야할경우 어떻게하 면될까요?
1 답변
-
논란의 여지가 적은 것부터 답변 드리겠습니다.
2번 질문: 예.
git flow feature finish foo
명령의 기본 동작은feature/foo
브랜치를 삭제하는 것입니다. 모든 기능브랜치는 develop에 통합되어 사라질 목적을 갖는다고 보시면 됩니다. 오히려, "아직 이 기능브랜치 삭제하면 안돼요" 하고 남겨두고 계속 가져가는 기능브랜치가 있다면, 그게 더 문제입니다.
4번 질문: 그냥 머지받으시면 됩니다. 애초에 "dev브랜치에서 다시 prod브랜치 소스를 땡겨"오는 것 자체가 항상 해야 하는 일입니다.
git flow release finish bar
명령의 기본 동작은release/bar
브랜치를master
에 붙이는 것뿐만이 아니고, 그 직후의master
를develop
에 붙이는 것까지 포함돼 있습니다. 머지를 받고 있는 거죠.git flow를 모범적으로 따를 경우, 항상
master
보다develop
이 더 큽니다. 가장 최신develop
은 가장 최신master
를 모두 갖고 있어야 합니다.
3번 질문: 각 피처가 끝났다고 해서 그걸 무조건 finish 해서 develop에 붙일 필요는 없습니다. 일단
feature/a
만 끝내서 그 상태의develop
을 릴리즈하고, 그 다음feature/b
를 끝내서 b 기능을 가진develop
을 릴리즈하는 순서대로 하면 됩니다.그게 정 안 되면, 그러니까 이미
git flow feature finish a
도 해버렸고git flow feature finish b
도 해버렸는데 이번 릴리즈에는 a만 내보내야 할 경우... 다음과 같이 할 수 있을 겁니다.git flow release start without-b
git checkout release/without-b
(git flow 기본동작에 의해 자동 수행됨)feature/b
가develop
에 병합된 커밋의 SHA 일련번호 확인 (ex:f00ba1
)git revert f00ba1
- 위 리버트에 의해 발생한 커밋의 SHA 일련번호 확인 (ex:
abc123
) git flow release finish
git checkout develop
(git flow 기본동작에 의해 자동 수행됨)git revert abc123
요컨대 릴리즈를 할 때에 한해서만 b 기능 관련 변경점을 제거하고, 다시
develop
에서 원복시킨다는 것이죠. 이해가 되시나요?
1번 질문: 기본적으로 맞는데, 왜 그러한지에 대해서는 기본 원칙을 기준으로 이해하시면 좋을 듯합니다. develop 브랜치의 기본 개념은, 여러 기능들이 모두 합의해야 하는 공통된 최신 정보를 공유하는 브랜치라는 것입니다.
- develop 브랜치에서는 항상 새 기능 개발을 시작할 수 있음
- 어떤 기능브랜치 개발을 종료할 때는, 항상 최신 develop 브랜치 기준으로 충돌/모순이 없어야 함
- 최신 develop 브랜치는 최신 master 브랜치 내용을 모두 가지고 있음
바로 이런 맥락에서 develop 브랜치를 개발자 테스트 브랜치로 쓸 수 있는 것이지요. 애초에 "테스트서버 배포용" 브랜치는 release 브랜치를 쓰는 편이 좋을 겁니다. (사실 릴리즈 브랜치란 것 자체가 이런 용도 말고는 별로 쓸모가 없지요.)
댓글 입력