git flow 이해하기
gitflow는 git을 이용해 개발하는 방법론이다.
gitflow?
git flow는 5개의 branch를 사용한다.
main
: 제품을 배포하는 branch이다. 실제 사용자가 사용하는 프로덕트의 코드가 이를 통해 배포된다.release
: main으로 보내기 전 검사하고 메시지를 작성하는 branch이다.develop
: 개발하는 branch고 개발자들이 이 branch를 기준으로 새로운 branch를 만들어 여기에merge
한다.feature
: 단위 기능을 개발하는 branch로 기능 개발이 끝날 경우 develop branch에 합친다.hotfix
: 배포후에 긴급히 수정해야할 버그가 발생했을 때 수정하는 branch이다
main
과 develop
가 메인으로 나머지 브랜치들은 상황에 따라 만들었다 지웠다 한다.
초기 설정
repo
가 있어야 한다.
github에서repo
를 만들고 초기 설정을 해준다.
![레포를 생성하였다](https://user-images.githubusercontent.com/79688915/143550337-ab86da42-7249-4a17-b852-bed8ca28eac9.png)
- git flow 초기화를 해준다.
맨 위 두 개의 branch명만 확인하면 된다.
기본값이 지정되어 있을 경우 엔터를 누르면 된다.
1 | git flow init |
![git flow init](https://user-images.githubusercontent.com/79688915/143550675-9d9bbc8c-4f7d-4118-ad00-22a669b75d32.png)
develop
이 생성되었는지 확인한다.
현재 gitflow 작업이 끝남에 따라 자동으로 develop 브랜치로 이동하였다.
1 | git branch |
![branch 확인](https://user-images.githubusercontent.com/79688915/143550844-3cc57c30-2ad7-4e16-9adc-9d42930b7d4c.png)
- 만들어진
develop
을 원격 저장소에 알린다.
로컬엔develop
가 있지만 원격저장소에선 push하기 전 까지 알 수 없다.
1 | git push -u origin develop |
![branch push](https://user-images.githubusercontent.com/79688915/143551293-5a69f66f-cddb-4959-b68a-4f6c79263175.png)
이걸로 main
과 develop
은 같은 상태가 되었다.
git flow 이용하기.
git flow를 이용한 개발은 다음과 같이 이루어진다.
- 기능 개발을 위해선
develop
에서feature/기능명
을 만들고 작업한 후 develop에merge
한다. - 여러 기능들이 각각의
feature/기능명
브랜치에서 작업이 완료되었을 경우release
에 merge하고
부족한 점을 보완하고 버그를 픽스하고 기술문서를 작성한다. release
를develop
과main
에 merge한다.main
에서 버전 태그를 붙여서 배포한다.
git으로 작업한다면 상당히 복잡하지만 git flow를 통해 작업을 편하게 할 수 있다.
window기준으로 git설치시 git flow도 자동으로 설치된다. macOS의 경우 별도의 설치가 필요하다.
차례대로 진행해보자.
feature/기능명
만들기
git flow에선 다음의 커맨드를 이용하여 기능개발을 시작할 수 있다.
나는 README라는 기능명으로 만들었다.
1 | git flow feature start '기능명' |
![기능 개발을 시작하자](https://user-images.githubusercontent.com/79688915/143553004-c3b993c8-481a-4259-8590-2536cb5b8edd.png)
생성된 브랜치를 확인하면
1 | git branch |
![새 브랜치가 생성되었다.](https://user-images.githubusercontent.com/79688915/143553118-c3a36669-e09c-4cf3-b164-5890777d97ff.png)
feature/'기능명'
이 잘 생성된 것을 확인할 수 있다.
- 작업하기
git flow에서 feature 명령어를 사용할 경우 자동으로 기능개발을 위한 branch로 이동한다.
이 상태에서 README를 임의로 수정하였다.
![README를 수정했다.](https://user-images.githubusercontent.com/79688915/143553647-231c007c-1e1f-4685-b991-3409725b5a4e.png)
- 기능개발 종료하기
작업이 끝났으면 기능 개발 단위별로 변경사항을add
하고commit
해준다. push는 하지 않아도 된다.
1 | git status |
![변경사항을 적용하기](https://user-images.githubusercontent.com/79688915/143553924-8304b500-840a-4236-b61e-fc5f180cc715.png)
그 후 기능개발을 끝내는 커맨드를 입력한다.
이 커맨드는 develop
와 feature/기능명
의 내용을 비교하고 변경점을 적용한 후 merge
한다.
merge가 완료되면 현재 branch를 develop
으로 옮긴다.
작업이 완료된 후 git branch로 확인하면 feature
기능명이 없어진 걸 확인할 수 있다.
변경사항을 develop
으로 push
해준다.push
전에 pull
을 통해 최신상태로 유지해준다.
1 | git flow feature finish "기능명" |
![feature branch가 사라졌다.](https://user-images.githubusercontent.com/79688915/143554434-d9c4f6f6-4991-4fae-b64a-b28f867e8f5b.png)
릴리즈하기
위 작업을 끝냈다면 develop
엔 변경사항이 적용되어 있다.
릴리즈하는 명령어는 다음과 같다.
명령어 입력후 커밋 메시지를 작성할 수 있다.
1 | git flow release start [version] |
![message 작성하기](https://user-images.githubusercontent.com/79688915/143555903-13f9e473-2d7f-4195-a9ec-6c1141e0510a.png)
변경사항을 main branch에도 적용하기
다음 명령어를 통해 main에 tags와 변경 사항등을 적용할 수 있다.
여기까지 했다면 main과 develop은 같은 상태로 기능 추가가 무사히 완료되었다.
1 | git checkout main |
느낀점
git flow는 굉장히 좋은 툴 같다.
브랜치를 만들어 작업하고 변경사항을 적용하는 것이 기존의 사용자에게 영향을 주지 않고 기능들을 추가할 수 있어 안정적이라고 생각한다.
gitflow를 이용한 협업과 프로젝트 관리도 간단히 경험해보았는데 상당히 유익한 경험이였다.
이것 또한 조만간 문서로 작성해보아야 겠다.