[TIL] 20220915 - Git Flow

yujamint·2022년 9월 16일
0

TIL

목록 보기
3/9

Git Flow

(협업에서) git flow를 시작하기 전, .gitignore 파일 생성, issue template 생성, 셋업 등은 미리 해놓는 것이 좋다.

  1. (main) git flow init : git flow를 쓰기 위해 초기화한다.

    이때, Branch name for “next release” development가 develop으로 자동으로 입력되어 있는데, 관습으로 develop을 사용한다.

    이외에도 여러 브랜치 이름,prefix가 자동으로 할당된다. 그대로 쭉 enter를 입력하면 된다.

    • git branch 를 입력하면 develop 브랜치가 생성된 것을 확인할 수 있다. → git flow init이 잘 끝난 것
  2. (develop) git flow feature start fizzbuzz : git flow를 이용해서 fizzbuzz라는 이름의 feature(기능)를 개발하기 시작하겠다.

    • feature prefix가 붙으면서 feature/fizzbuzz라는 이름의 브랜치가 생성된다. 이 브랜치는 1번 과정에서 생성된 develop 브랜치에서 분기된 브랜치다.
    • feature/fizzbuzz 브랜치가 생성됨과 동시에 자동으로 해당 브랜치로 이동하게 된다.
  3. (feature/fizzbuzz) 생성된 feature/fizzbuzz 브랜치에서 작업을 진행하고, 작업을 마치면 작업한 파일들을 add,commit 한다.

  4. (feature/fizzbuzz) git flow feature finish fizzbuzz : commit을 마치면, 더이상 fizzbuzz 브랜치에서 할 작업이 없기 때문에 작업을 끝낸다.

    • 해당 명령어를 실행하면, 다음과 같은 일이 일어난다.
      • merge commit이 뜬다.
        • recursive 전략으로 develop 브랜치에 merge 된다.
      • feature/fizzbuzz 브랜치가 삭제된다.
      • develop 브랜치로 이동하게 된다.
  5. (develop) git flow release start v0.1 : 위 과정을 반복하며 개발한 기능들이 develop 브랜치에 쌓이게 되면, git flow를 이용해서 release를 한다.

    네이밍 전략 : 보통 version을 뜻하는 v에 숫자를 붙인다. 두 자리가 될지, 세 자리가 될지는 팀에서 버전 네이밍을 어떻게 하냐에 따라 달라진다. (보통 release가 많으면 세 자리를 쓴다.)
    가장 앞에 있는 0은 베타 버전을 의미한다. (0에서 1로 올라가는 것은 아주 큰 이벤트다.)

    • release start를 하면, release/v0.1 브랜치가 생성되며 자동으로 해당 브랜치로 이동하게 된다.
  6. (release/v0.1) git flow release finish v0.1 : release를 마친다.

    release finish를 하는 순간, 마지막 상태를 main과 develop 브랜치에 넘겨주게 된다.

    • 이때, 첫 번째로 main 브랜치에 대한 merge commit , 두 번째로는 첫번째 commit에 대해서 태깅하는 절차, 마지막으로 develop 브랜치에 대한 merge commit 총 2~3개의 commit이 뜨게 된다.
      • 현재 뜨는 창이 어떤 commit인지는 메시지를 읽어보면 알 수 있다.
      • 두 번째로 뜨게 되는 태깅 창에서 release note를 쓰면 된다. (변경 사항 작성)
      • 첫 번째와 세 번째에 뜨는 commit은 무시하고 넘겨도 된다.

    정리하자면, git flow release finish를 실행하면

    • release/v0.1 브랜치가 main 브랜치에 merge 된다.
    • release에 v0.1이라는 태그가 붙는다.
    • 해당 태그가 develop에 merge 된다.
    • release/v0.1 브랜치가 삭제된다.
    • develop 브랜치로 이동한다.
  7. (develop) git push -u origin develop , (main) git push origin main : release 가 끝나면 develop 브랜치와 main 브랜치에서 각각 push한다.

    우리가 작업할 때는 로컬의 develop 브랜치에서 작업했지만, remote repository인 github에는 develop 브랜치가 없고, main 브랜치만 있다. 그러므로, remote에도 develop 브랜치를 추가해줘야 한다.

    • 이때, 로컬의 develop 브랜치와 원격에 생성될 develop 브랜치가 이름만 같을 뿐 아니라 논리적으로도 같은 브랜치라는 것을 알려주기 위해 -u flag와 함께 push한다.
      • -u : upstream set, 처음 만든 브랜치에서 푸시할 때, 한 번만 실행하면 된다.
      • main에서 -u push 하지 않은 이유 : clone해온 것이기 때문에 로컬의 main과 remote의 main이 같은 브랜치라는 것을 git에서 이미 알고 있다.
  8. git push --tags : 지금 발행되어있는 tag를 모두 push 한다.

  9. Github에서 create release from tag를 통해 tag를 발행한다.

profile
개발 기록

0개의 댓글