GIT Workflow
![업로드중..]()
Git 기본 명령어
초기 설정
$ git config --global user.email "user email"
$ git config --global user.name "user name"
$ git config --global color.ui true
초기 Git Repository 구성
$ git init git-basic
$cd git-basic/
현재 상태 확인
$ git status
코드 index 영역으로 이동(stage)
$ git add *
Commit 생성
$ git commit
$ git commit -a
add와 commit을 한번에
$ git commit -m "message"
vim에서 별도의 메세지를 작성할 필요없이 인라인 형식으로 바로 커밋 메세지 작성.
commit 결과 확인
$ git log
원격 서버 업로드
$ git push Origin master
파일 구성 내용 확인
$ git blame "파일 이름"
한 줄 한 줄 마지막으로 커밋한 사람이 누구인지, 언제 마지막으로 커밋했는지 볼 수 있다.
새로운 브랜치 생성
$ git branch "브랜치 명"
해당 브랜치로 이동
$ git checkout "브랜치 명"
브랜치 병합
$ git checkout master
병합의 주체가 되는 브랜치로 이동
$ git merge initial
병합의 주체가 되는 브랜치에 merge 뒤에 오는 브랜치 병합
원격 git 저장소 복제
$ git clone
개발 중에 발생할 수 있는 문제
- 빌드에러가 발생한다. 누가 만든 것이고 왜 만들어진 코드인가?
$ git blame A.cpp
- A라는 사람이 만든 코드들만 모두 수집하고 싶다
$ git log --author=A
- 최근 1개월 동안 작성된 코드 중 "PATH"를 수정한 commit을 살펴보고 싶다
$ git log --since=1month -SPATH
- 한줄로 히스토리를 출력하고 싶다
$ git log --oneline
- Author가 아니라, 실제 commit을 작성한 사람이 누군지 알고 싶다
$ git log --pretty=fuller
- V1.0과 V2.0 사이의 변경사항을 확인하고 싶다. 비교 분석이 쉽도록 Compare tool을 사용하고 싶다
$ git difftool V1.0 V2.0
Main Branch 운영방안
- master branch: 소스의 mainstream을 운영하는 Branch. 소스는 production-ready 상태가 되도록 항상 유지
- develop branch: 다음 릴리즈를 위해 최신 개발 내용을 담는 Branch. 다른 말로 integration branch라고도 함
- develop branch의 소스코드가 안정화되고 릴리즈 준비가 되었을 때, 모든 변경사항들은 master branch로 merge 되고 릴리즈 넘버로 tag됨
- 변경사항은 master branch로 merge가 될 때마다, 새로운 제품이 릴리즈 됨
Supporting Branch 운영방안
- 개발팀이 팀 멤버들간 이루어지는 병렬적으로 개발, 이슈 추적, 제품 릴리즈 준비, 버그 수중을 제품에 반영하는 문제 등을 준비하기 위해 추가적인 Branch 운영
- Main branch와 달리 Support Branch들은 event적으로 사용되기 때문에 제한된 life time을 가진다
- Feacture branchs
새로운 기능을 개발하는데 사용
- Release branchs
새로운 제품 출시를 위해 준비하는 branch. 제품 출시를 위해 검증을 마친 후, master branch에 merge하고 version tag 작성 후, release branch 삭제
- Hotfix branchs
master branch에서 치명적인 버그가 발견된 경우 버그 수정을 위해 생성하는 Branch. 버그 수정 후 master branch에 merge하고 version tag 작성후, hotfix branch 삭제
Git-flow
Git-flow는 총 6개의 브랜치를 사용해서 운영한다
- master: 기준이 되는 브랜치로 제품을 배포하는 브랜치
- develop: 개발 브랜치로 개발자들이 이 브랜치를 기준으로 각자 작업한 기능들을 합친다
- feature: 단위 기능을 개발하는 브랜치로 기능 개발이 완료되면 develop 브랜치에 합친다
- release: 배포를 위해 master 브랜치로 보내기 전에 QA(품질검사)를 하기위한 브랜치이다.
- hotfix: master 브랜치로 배포를 했는데 버그가 생겼을 때 긴급 수정하는 브랜치이다.
- supprot: 버전 호환성 문제를 처리하기 위한 branch
$ git flow init 명령어를 실행하면 프로세스 별로 사용할 branch 이름을 입력하라는 메시지가 뜬다. git flow init -d 로 실행하면 이 과정을 생략할 수 있다
git flow 사용 예시
$ git flow feature start "branch name"
위 명령어를 수행하면 새로운 기능 개발을 위한 branch가 "feature/branch name"이라는 이름으로 생성되고, 자동으로 해당 branch로 checkout 된다
해당 branch에서 작업을 진행하다가 기능이 완료되면 git flow에게 이 사실을 알린다
$ git flow feature finish "branch name"
feature finish 명령어가 실행되면
1. git flow는 develop branch로 checkout 한 후
2. feature branch의 변경 내용을 자동으로 develop branch에 merge하고
3. 작업이 끝난 feature branch를 삭제한다
해당 branch를 여러 개발자와 공동으로 개발하고 싶다면 원격 서버에 게시하면 된다
$ git flow feature publish "branch name"
다른 사용자가 게시한 기능을 가져오는 명령어는 다음과 같다
$ git flow feature pull origin "branch name"
만약 해당 branch를 merge 하지 않고 삭제한다면 다음과 같이 한다
$ git branch -D "branch name"