안녕하세요! 이번 글에서는 Git Flow를 사용하여 릴리스 브랜치(release branch)를 생성하고 작업하는 방법을 자세하게 설명하겠습니다. 릴리스 브랜치는 소프트웨어 배포 준비를 위한 중요한 단계로, 최종 테스트와 버그 수정을 거쳐 안정적인 버전을 만드는 데 사용됩니다.
이번 글에서는 실제 예제를 통해 릴리즈 브랜치를 생성하고 작업하는 과정을 단계별로 알아보겠습니다.
release 브랜치
release 브랜치는 배포 준비를 위한 브랜치입니다. 이 브랜치는 develop 브랜치에서 분기되어 최종 테스트와 버그 수정을 거친 후 master 브랜치와 develop 브랜치로 병합됩니다.
릴리스 브랜치를 사용하면 배포 과정에서 새로운 기능이 추가되는 것을 방지하고, 안정적인 상태로 배포 준비를 할 수 있습니다.
주요 특징
release 브랜치는 다음과 같은 특징이 있습니다.
- develop 브랜치에서 분기됩니다.
- 배포 준비가 완료되면 master와 develop 브랜치로 병합됩니다.
- 이름 규칙: release/[release version]
release 브랜치 생성
release 브랜치를 생성하는 첫 번째 단계는 develop 브랜치에서 새로운 릴리스 브랜치로 분기하는 것입니다. git flow에서는 이를 쉽게 수행할 수 있도록 명령어를 제공합니다.
# Git 명령어
$ git checkout develop
$ git checkoub -b release/1.0.0
# Git Flow 명령어
$ git flow release start 1.0.0
🧑🏻💻 Git 명령은 Terminal
Git 명령어는 터미널에서 하는 것으로 연습합니다. 처음에는 어려울 수 있으나 익숙함의 차이라 생각합니다.
위 명령어를 실행하면 develop 브랜치에서 release/1.0.0 브랜치가 생성되고 해당 브랜치로 전환됩니다.
$ git flow release start 1.0.0 --showcommands
git config --local gitflow.branch.release/1.0.0.base develop
git checkout -b release/1.0.0 develop
Switched to a new branch 'release/1.0.0'
Summary of actions:
- A new branch 'release/1.0.0' was created, based on 'develop'
- You are now on branch 'release/1.0.0'
Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:
git flow release finish '1.0.0'
이제 릴리스 준비를 시작할 준비가 되었습니다.
Release 브랜치에서 작업하기
Release 브랜치가 생성되었으니 이제 배포 준비를 위해 최종 테스트와 버그 수정을 수행할 수 있습니다. 예를 들어, 새로운 기능을 추가하고 변경 사항을 커밋합니다.
# 기존 파일 버그 수정
$ echo "Test & Bugfix" >> new-feature-file.txt
# 변경 사항 확인
$ git status
On branch release/1.0.0
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: new-feature-file.txt
no changes added to commit (use "git add" and/or "git commit -a")
# 변경 사항 스테이징
$ git add new-feature-file.txt
# 변경 사항 스테이징 확인
$ git status
On branch release/1.0.0
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: new-feature-file.txt
# 변경 사항 커밋
$ git commit -m "Bugfix new-feature-file"
[release/1.0.0 300f2d5] Bugfix new-feature-file
1 file changed, 1 insertion(+)
echo를 이용해서 new-feature-file.txt에 데이터를 추가합니다. 이는 파일이 수정되었다고 가정하기 위함입니다.
파일이 수정되었다면 status를 이용해서 수정된 파일의 목록을 확인하고 이번에 반영된 소스들을 확인합니다. 확인 이후에는 수정된 파일을 커밋하기 전 스테이징으로 반영하고 커밋을 진행합니다.
변경 사항이 release/1.0.0 브랜치에 커밋되었습니다. 최종 테스트를 통해 추가적인 버그를 찾고 추가할 수 있습니다.
Release 브랜치 병합
Release 준비가 완료되면 release/1.0.0 브랜치를 master 브랜치와 develop 브랜치에 병합해야 합니다.
# Git 명령어
$ git checkout master
$ git merge --no-ff release 1.0.0
$ git tag -a 1.0.0
$ git checkout develop
# tag를 이용해 back-merge 또는 release 브랜치를 바로 머지
# 둘 중 하나를 사용
# tag를 이용한 back-merged
$ git merge --no-ff 1.0.0
# 브랜치를 develop에 merged
$ git merge --no-ff release/1.0.0
$ git branch -d release/1.0.0
# Git Flow 명령어
$ git flow release finish 1.0.0
release 브랜치를 master 브랜치와 develop 브랜치로 병합하면서 tag까지 생성하도록 합니다. git을 사용하면 다음과 같은 과정을 직접 진행해야 합니다.
- master 브랜치로 이동
- release/1.0.0 브랜치를 master 브랜치에 병합
- release 태그 생성
- develop 브랜치로 이동
- tag를 이용한 back-merge 또는 release 브랜치를 develop에 머지
- release/1.0.0 브랜치 삭제
위와같이 6단계를 거쳐서 git 명령어를 사용하는데 반해 git flow 명령어는 이 과정을 하나의 명령어로 해결할 수 있습니다.
$ git flow release finish 1.0.0 --showcommands
git checkout master
Switched to branch 'master'
git merge --no-ff release/1.0.0
Merge made by the 'ort' strategy.
new-feature-file.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 new-feature-file.txt
git checkout master
Already on 'master'
git tag -a 1.0.0
git checkout develop
Switched to branch 'develop'
git merge --no-ff 1.0.0
Merge made by the 'ort' strategy.
new-feature-file.txt | 1 +
1 file changed, 1 insertion(+)
git branch -d release/1.0.0
Deleted branch release/1.0.0 (was 300f2d5).
Summary of actions:
- Release branch 'release/1.0.0' has been merged into 'master'
- The release was tagged '1.0.0'
Merge branch 'release/1.0.1'
- Release tag '1.0.0' has been back-merged into 'develop'
- Release branch 'release/1.0.0' has been locally deleted
- You are now on branch 'develop'
--showcommands 옵션을 사용해서 내용을 보면 우리가 보던 그림과는 다르다는 사실을 알 수 있습니다. 우리는 release 브랜치를 그대로 develop 브랜치에 병합하는 것으로 알고 있지만 tag를 저장하고 tag를 develop으로 back-merge 하는 것을 볼 수 있습니다. 만약 우리가 아는 git flow 방법대로 병합을 진행하고 싶다면 다음과 같이 옵션(-b)을 추가해 줍니다.
$ git flow release finish 1.0.0 -b --showcommands
git checkout master
Switched to branch 'master'
git merge --no-ff release/1.0.0
Merge made by the 'ort' strategy.
new-feature-file.txt | 1 +
1 file changed, 1 insertion(+)
git checkout master
Already on 'master'
git tag -a 1.0.0
git checkout develop
Switched to branch 'develop'
git merge --no-ff release/1.0.0
Merge made by the 'ort' strategy.
new-feature-file.txt | 1 +
1 file changed, 1 insertion(+)
git branch -d release/1.0.0
Deleted branch release/1.0.0 (was 4294c7c).
Summary of actions:
- Release branch 'release/1.0.0' has been merged into 'master'
- The release was tagged '1.0.0'
- Release branch 'release/1.0.0' has been merged into 'develop'
- Release branch 'release/1.0.0' has been locally deleted
- You are now on branch 'develop'
Git flow 명령어를 실행하면 다음과 같이 3가지 과정이 있습니다.
먼저 Commit 메세지를 입력하도록 합니다. 기본 문장은 "Merge branch 'release/1.0.0'으로 나와있습니다.
Merge branch 'release/1.0.0'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
쉘로 나오기 때문에 저장하고 종료하기 위해서는 :wq 라 입력해줍니다. w는 write, q는 quit으로 저장하고 종료한다는 내용입니다. 저장하고 종료하면 다음 물음이 나타납니다.
# Write a message for tag:
1.0.0
# Lines starting with '#' will be ignored.
이번에는 태그를 저장하는 단계입니다. 이 태그는 1.0.0 앞에 #이 붙어 있는데 이는 제거해서 태그를 추가하거나 바로 :wq를 이용해서 추가하지 않을 수도 있습니다.
이 실습에서는 #으로 이동해서 x를 눌러서 제거하고 :wq 로 종료합니다.
마지막으로 develop으로 머지되는 Commit 메세지 입니다. master 브랜치와 develop 브랜치로 머지하기 때문에 각각의 커밋메시지가 필요합니다.
Merge tag '1.0.0' into develop
1.0.0
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
마찬가지로 :wq를 이용해서 저장후 종료하면 작업이 완료됩니다.
Release 브랜치의 장점
Release 브랜치를 사용하는 것은 여러 가지 장점을 제공합니다.
- 안정성 확보: 릴리즈 브랜치를 통해 최종 테스트와 버그 수정을 독립적으로 수행할 수 있어, 배포 시 코드의 안정성을 보장할 수 있습니다.
- 체계적인 배포 과정: 릴리스 브랜치를 사용하면 배포 과정이 체계적으로 이루어지며, 새로운 기능이 배포 준비 중에 추가되는 것을 방지할 수 있습니다.
- 명확한 버전 관리: 각 릴리스에 대해 명확한 버전 번호를 부여하고 태그를 생성할 수 있어, 나중에 특정 버전으로 쉽게 되돌아갈 수 있습니다.
- 효율적인 버그 수정: 배포 준비 과정에서 발견된 버그를 빠르게 수정하고 테스트할 수 있어, 배포 전 코드의 품질을 높일 수 있습니다.
이번 글에서는 Git Flow를 사용하여 릴리즈 브랜치를 생성하고 작업하는 방법에 대해 자세히 알아보았습니다. release 브랜치를 통해 개발자는 최종 테스트와 버그 수정을 독립적으로 수행하고, 안정적인 상태로 배포를 준비할 수 있습니다. 릴리즈가 완료되면 master 브랜치와 develop 브랜치에 병합하여 최신 상태를 유지할 수 있습니다. 이는 팀 전체의 협업 효율성을 크게 향상시키고, 코드의 안정성을 보장하는 데 도움이 됩니다.
다음 글에서는 Git Flow를 사용하여 긴급 버그 수정을 위한 핫픽스 브랜치를 생성하고 병합하는 빙법에 대해 자세히 알아보겠습니다. 이 글이 도움이 되시길 바랍니다. 궁금한 내용이 있다면 댓글로 질문해 주세요. 감사합니다.
이전 글
'쿤즈 Dev > Git' 카테고리의 다른 글
[Git Flow] Git Flow 실습: hotfix 브랜치 (0) | 2024.07.06 |
---|---|
[Git Flow] Git Flow 실습: Feature 브랜치 (0) | 2024.06.22 |
[Git Flow] Git Flow 브랜치 모델 (0) | 2024.06.15 |
[Git Flow] Git Flow 설치 및 설정 (0) | 2024.06.10 |
[Git Flow] Git & Git flow 소개 (0) | 2024.06.08 |
댓글