git

홍준섭·2023년 2월 28일

개발 공부

목록 보기
17/20
post-thumbnail

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"

profile
개발 공부중입니다

0개의 댓글