대부분의 회사에서 Git을 사용할 경우 Git Flow를 따릅니다.
그러다보니 귀찮을때가 많습니다.
단적인 예로 release 브랜치 작업이 끝난후 다음과 같은 작업이 진행됩니다.
- develop 브랜치로 스위칭 -> release 브랜치를 merge
- master 브랜치로 스위칭 -> release 브랜치를 merge
- master 브랜치에 tag 추가
- release 브랜치 삭제
이런 작은 행위들이 크진 않지만 막상 할때마다 귀찮습니다.
그래서 좀 더 편하게 한번에 할수 없을까 고민하다가 IntelliJ Git Flow Integration을 발견하여 정리합니다.
Tip)
Source Tree에서도 Git Flow를 지원합니다.
자세한 내용은 블로그 (영문) 을 참고하세요!
이미지 중심이라 이해하시는데 크게 어려움이 없으실것 같습니다.
설치
맥 OS를 기준으로 homebrew를 통해 git flow를 먼저 설치합니다.
brew install
git-flow-avh
Tip)
다른 OS에서의 설치법은 위키를 참고하세요!
(개발환경 설치때마다 Mac OS 짱짱을 외칠수밖에 ㅠㅠ…)
git flow가 설치되셨으면 아래와 같이 Git Flow Integration
플러그인을 설치합니다.
IntelliJ를 재시작하시면 설치가 완료됩니다!
사용
저는 기본적으로 IntelliJ가 제공하는 Task 기능을 함께 사용합니다.
Tip)
Task 기능이 궁금하시다면 이전에 포스팅한 내용을 참고해보세요!
플러그인 설치후 IntelliJ 우측 하단을 보시면 다음과 같이 No Gitflow가 보입니다.
클릭하셔서 Init Repo를 선택합니다.
그럼 아래와 같이 설정 화면이 등장합니다.
기본 옵션은 저희가 알고 있는 Git Flow 규칙을 따르기 때문에 수정할 부분은 없습니다.
바로 OK 합니다.
Task 활성화를 위해 option+shift+n
으로 Task 하나를 선택합니다.
Tip)
회사 업무는 JIRA로, 개인 업무는 Trello로 사용합니다.
IntelliJ Task는 이들 모두를 지원합니다.
Task를 선택하시면 다음과 같이 Task관리와 브랜치 관리가 한번에 등장합니다.
여기서 Start Feature를 원하는 브랜치명으로 등록하면 브랜치가 자동 생성됩니다.
생성되시면 아래와 같이 develop 브랜치에서 feature 브랜치가 생성되었음을 알려줍니다.
(위처럼 생성하시면 아래처럼 feature/feature가 됩니다.
feature는 빼고 생성하셔야합니다!)
feature 브랜치에서 필요한 내용들을 다 커밋 합니다.
(Task의 커밋 템플릿을 통해 Trello의 summary가 항상 커밋 메세지에 포함되도록 한 상태입니다.)
작업이 다 되셨으면 git flow 규칙에 따라 develop 브랜치에 merge를 해야하는데요.
이때 직접 merge가 아닌 플러그인을 통해 merge를 합니다.
우측 하단의 Gitflow 버튼을 클릭해 Finish Feature 를 선택합니다.
자동으로 develop에 머지가 됩니다.
(IntelliJ Git 그래프가 어려우실까봐 Source Tree로 그래프 화면을 첨부했습니다.)
merge의 기본옵션은 fast-forward입니다.
만약 merge도 하나의 커밋으로 보고 싶으신 분들은 Do not fast-forward..를 체크합니다.
develop에 merge가 되었으니 release 브랜치를 생성합니다.
이전과 마찬가지로 Gitflow를 클릭하신뒤 Start Release를 선택합니다.
release 브랜치를 생성합니다.
생성시에 relase라는 prefix는 자동 추가되니, 실제 브랜치명만 추가하면 됩니다.
(예: v0.0.2로 등록하면 release/v0.0.2로 브랜치가 생성됩니다.)
release 브랜치에서의 작업도 마무리 되셨으면 Finish Release를 선택합니다.
추가로 tag명도 입력합니다.
완료 되시면 아래와 같이 이벤트 메세지로 여러 행위가 진행됐음을 알려줍니다.
Source Tree를 통해 직접 확인해보시면!
- develop merge
- master merge
- master에 tag 추가
- release 삭제
가 한번에 이루어졌습니다!
어떠신가요?
Git Flow 규착에 따라 버튼만 선택하면 모든 이벤트가 자동으로 진행됩니다.
Git Client에서 이것저것 브랜치를 변경해가며 merge, remove, tag 등을 전혀 할 필요가 없습니다.
개인적으로는 이 기능을 알고나서 Git 사용의 반복작업이 50%이상 줄어든것 같습니다.
다른 분들에게도 이 기능이 도움이 되셨으면 합니다.
감사합니다^^
좋은 툴 소개 정말 감사드립니다!
안그래도 Svn쓰다가 Git으로 넘어와서 애먹고 있는데 이 툴 보니까 정말 좋은거 같아요.
아울러 질문을 조금 드리고 싶은데요...
1. init repo 단계에서 보면 feature, release, hotfix 등의 branch 설정을 할수 있는 부분이 있는데요.
만약 해당 브랜치를 미리 생성하지 않고 실수로 OK를 누른 경우
1) 툴에서 자동으로 생성을 해주는건지(당장은 아니더라도 Finish Feature - Finish Release등의 절차를 밟아가는 동안이라도요)
2) 자동 생성은 아니고 설정한 브랜치 이름에 맞추어 사용자가 브랜치들을 생성해줘야 동작하는지
알고 싶습니다.
2. init repo 설정은 한번 ok 해버리면 플러그인설정에서도 다시 설정 못하던데 재설정 방법이 있는지 알고싶습니다.
3. 작업 다 마치고 finish feature 하는 순간에 fatal: Working tree contains unstaged changes. Aborting.
이라는 오류메세지가 뜨는데, 구글 검색해봐도 도통 원인을 모르겠습니다. 혹시 아시는 바가 있는지...
## 이건 자체 해결했습니다. 커밋 제대로 안하고 finish 를 눌러서 생긴오류였고 다 정리하고 finish feature 눌러주면 정상동작 하네요.
답글
안녕하세요! 댓글 감사합니다
1-1) 브랜치는 init repo시에는 생성되지 않구요.
start feature 단계에서 생성됩니다.
혹은 Task 생성시에 feature 브랜치가 자동 생성됩니다.
1-2) 브랜치는 사용자가 수동생성하진 않구요.
Gitflow 의 start feature를 통해 생성하시면 됩니다!
2. 제가 알기로는 init 레포 설정은 프로젝트에 종속적이라서 새로운 프로젝트에서 다시 해야할수있습니다
새 프로젝트를 생성하시면 되지 않을까 싶습니다!
(요건 확인이 필요하네요!)
답변 감사드립니다! 프로젝트 종속적이라는 힌트 듣고는 방법을 찾았습니다. 이 플러그인 관해선 여기 글만큼 잘 설명해준 곳이 없어서 저같은 사람 또 나올까봐 달아둡니다.
프로젝트에 폴더에 보면 (탐색기나 파인더에서 '숨겨진 파일보기' 해주셔야 합니다)
.git 라는 폴더에 config파일을 편집하면,
[gitflow "branch"]
master = main
develop = ?????
이런 부분이 있습니다. 여기서 develop에 해당하는 부분에 넣고 싶은 브랜치 명을 적어주면 됩니다.
같은 방식으로 다른 브랜치 이름이나 설정도 변경 가능합니다.