소프트웨어 버전 관리 & Tag & branch 관리전략부터 Git 명령어(merge, conflict, amend, stash)
소프트웨어 버전 관리
- 일반적으로 Major, Minor, Patch 3개의 구분 기호를 통해 버전을 관리
예시)
v2.4.1 일 때
2 → 대규모 기능 추가 등 Major 업데이트가 이루어질 때 변경
4 → 세부 기능 추가 등 Minor한 업데이트가 이루어질 때 변경, 자주 변경이 일어남
1 → 버그 패치 등의 사소한 변경이 이루어질 때 변경
소프트웨어 버전명 기록하기
- 버전관리를 위해선 각 버전에 대한 기록이 필요하다
- 배포를 할 때마다 해당 버전 시점의 소스코드를 잘 기록해두어야 한다
- 명확한 목적성을 가지고 해당 시점의 코드를 기록해두는 것
- 현재 소스코드 상태에 대한 기록 생성을 위해선
git tag -a 태그명
생성된 tag 확인하기
git tag -l
생성된 tag 원격 저장소에 반영하기
git push origin 태그이름
tag 삭제하기
git tag -d 태그이름
원격저장소 tag 삭제하기
git push origin :태그이름
Branch 생성 전략 - Git Flow
- branch를 마구잡이로 생성하다 보면 관리가 안 되기 때문에 branch를 어떻게 만들지에 대한 전략이 필요하다
- Git Flow는 5개의 branch를 이용해서 개발을 진행한다
(1) master 제품으로 출시될 수 있는 브랜치
(2) develop 다음 출시 버전을 개발하는 브랜치, master 브랜치에서 파생된 것
(3) feature 기능을 개발하는 브랜치, develop 브랜치에서 파생된 것
(4) release 이번 출시 버전을 준비하는 브랜치, develop과 feature의 내용을 release에 반영
보통 QA 작업이 이때 진행된다. QA도 완료된다면 이를 버전 tagging 후 다시 master에 반영
(5) hotfix 출시 버전에서 발생한 버그를 수정하는 브랜치
◎ master 브랜치에서 시작 → 동일한 브랜치를 develop에도 생성, 개발자들은 develop 브랜치에서 개발을 진행
→ 개발을 진행하다 기능 구현이 필요한 경우 개발자는 develop 브랜치에서 feature 브랜치를 하나 생성해서 구현
→ 완료된 feature 브랜치는 검토를 거쳐 다시 develop 브랜치에 합친다(merge) → 모든 기능이 완료되면 develop
브랜치를 release 브랜치로 만든다. QA를 하면서 보완점을 보완하고 버그를 픽스한다 → release 브랜치를 master,
develop 브랜치로 보낸다. master 브랜치에서 버전추가를 위해 tag를 하나 생성하고 배포 → 배포를 했는데 버그가
있을 경우 hotfixes 브랜치를 만들어 긴급 수정 후 태그를 생성하고 수정 배포
소프트웨어 출시 과정
신규 기능(feature) 개발 → 신규 기능들을 모아서 새로운 version 생성 → QA를 통해 문제 없는지 검증
→ 문제가 없다면 해당 version 을 release
Git의 원리
- git은 내부적으로 working directory, staging area, repository로 파일을 관리한다
- working directory는 현재 작업을 하고 있는 git 저장소를 의미, 변경내역이 추적되지 않는다
- working directory 내 특정 파일에 대한 추적 명령이
git add
git add
가 수행되면 해당 파일은 working directory에서 staging area(논리적 공간)로 옮겨진다
- 이를 최종적으로 repository에 반영하는 것은
git commit
두 개의 branch 내용을 합치기
- 독립적으로 개발되던 2개의 branch에 있는 내용을 merge를 이용해서 합칠 수 있다
- 먼저 합칠 대상이 되는 branch로 이동
git checkout 브랜치명
→ 합치고 싶은 명령어 지정 git merge 브랜치명
두 개의 branch를 합치는 과정에서 발생한 conflict
- 2개의 branch에서 동일한 파일을 수정한 뒤 commit 후 이를 merge할 경우 conflict이 발생할 수 있음
- conflict가 발생할 경우 수동으로 해결해서 새로운 commit을 만들어줘야 한다
이전 commit 내역 수정하기
- 실수로 commit에 포함시켜야 할 내용을 빠뜨린 경우 amend 옵션을 이용해서 이전 내용에 새 내용을 추가 가능
git commit --amend
변경 사항을 잠시 keep하기
- 특정 branch에서 작업을 진행 중에 다른 branch에서 작업을 요청받는 경우 해결 방법이다
- 이 때 작업하던 내역을 commit하기 애매할 경우 변경사항을 잠시 keep 하기 위해
git stash
명령을 사용
- stash save를 하면 지금까지 작업했던 파일이 임시 저장소에 보관되어 사라지는 것을 볼 수 있다
- 명령어
(1) 작업 내역을 stash에 저장 git stash save
(2) stash에 저장된 내용 보기 git stash list
(3) stash에 저장해놨던 내용 가져오기 git stash pop