GIT DOCUMENTS, GIT BRANCH, GIT FLOW

git repository documents, git branch, merge, git flow

Posted by iheese on March 31, 2022 · 4 mins read

Git Documents

  • README.md : 프로젝트와 Repository를 설명하는 문서, 책 표지와 같은 역할을 하며 이 문서로 동료, 사용자들이 내용을 요약할 수 있어야 한다.
  • .gitignore : git이 추적할 필요가 없는 파일을 작성하는 문서, 해당 문서에 작성된 리스트는 수정사항이 생겨도 git이 무시하게 된다. 특정 파일 확장자를 무시하거나 이름에 패턴이 존재하는 경우, 특정 디렉토리 아래의 모든 파일을 무시할 수 있다.
  • LICENSE : 어떤 프로젝트에 대한 사용 허가 권한, 직접 만들 때도, 배포할 때도 신경써야 할 일이다.
    • MIT License : MIT 에서 만든 라이센스, 모든 행동에 제약이 없으며, 저작권자는 소프트웨어와 관련한 책임에서 자유롭다.
    • Apache License 2.0 : Apache 재단이 만든 라이센스, 개인적, 상업적 목적으로 이용할 수 있으며 라이센스의 버전 및 표시만 반드시 포함하면 된다.
    • GNU General Public License v3.0(GNU 일반 공중 사용 허가서) : 자유 소프트웨어 재단에서 만든 라이센스, 위 라이센스를 사용하면 사용된 소프트웨어도 공개되어야 한다는 의무사항 등이 존재한다.


Branch

  • 커밋 시점을 기준으로 하여 분기점을 생성해 독집적인 코드 변경을 가능하게 하는 모델
  • git branch : 현재 브랜치 위치, 어떤 브랜치가 존재하는지 알려준다.
  • git branch [새 브랜치 이름] : 새로운 브랜치를 생성한다.
  • git branch -D [삭제할 브랜치 이름] : 브랜치를 삭제한다.
  • git checkout [존재하는 브랜치 이름] : 브랜치를 이동한다.
  • git checkout -b [존재하지 않는 브랜치 이름] : 브랜치를 생성하며 이동한다.
  • git switch [존재하는 브랜치 이름] : 브랜치를 이동한다.
  • git switch -c [존재하지 않는 브랜치 이름] : 브랜치를 생성하며 이동한다.


Merge(병합)

  • 어떤 A branch에서 작업하하여 커밋한 것을 main 브랜치로 덮는 방법
  • Conflict(충돌): A branch에서도 커밋이 일어나고 main 브랜치에서도 커밋이 일어난 상태에서 merge하게 되면 git에서 두 변화를 모두 보여주며 수정하게 한다.
  • 두 브랜치 중 하나를 택하거나, 두 수정 내역을 합치는 등 수동으로 충동을 해결해야 한다.


git-flow

Git flow

*git flow 설치하는 법은 여기 참고, window는 git-bash에 설치되어 있다.

  • (hotfix)-master-(release)-develop-feature 브랜치로 이루어진 모델
  • develop 단계서 시작하고 feature 단계에서 직접 개발은 하게 된다.
  • feature 단계에서 develop로 모인 커밋들이 v0.0.0 버전의 크기(중요도)별로 적용되어 release 되게 된다.
    • Ex) 게임 예시
    • vN.0.0 : 첫 번째 숫자가 바뀌는 것은 새로운 맵 등장, 캐릭터 등장 등
    • v0.N.0 : 두 번째 숫자가 바뀌는 것은 기존 맵 수정, 캐릭터 능력치 조절 등
    • v0.0.N : 세 번째 숫자가 바뀌는 것은 정말 작은 버그, 에러 사항 등
  • release 과정이 모여 검토 후 master 단계에서 직접 유저들에게 서비스된다.
  • hotfix 의 경우에는 긴급한 에러가 생겼을 때 사용할 수 있는 브랜치이다.
  1. git flow init : git flow 사용 시작
    • 브랜치 명명 규칙을 정한다, 기본값 추천
  2. git flow feature start [feature브랜치이름] : feature 브랜치를 시작한다.
  3. 기능 개발
  4. git flow feature finish [feature브랜치이름] : 자동으로 develop에 merge되며 feature 브랜치를 삭제한다.
  5. git flow release strat v0.0.1 : release 브랜치를 생성하고 버전을 정한다.
  6. git flow release finish v0.0.1 : release 브랜치를 끝낸다(삭제된다), 보통 3가지를 커밋으로 확인하게 된다.
    • main으로 merge한 것
    • main에 붙은 version tag
    • develop으로 merge한 것
  7. git push -u origin develop , git push origin develop , git push --tag : 세 가지를 모두 push해주어야 한다.
  • hotfix
    1. git flow hotfix start VERSION [BASENAME] : master의 현재 출시된 브랜치를 만든다.
    2. git flow hotfix finish VERSION : develop, master 브랜치로 merge되며 master 부분은 핫픽스 버전(BASENAME)으로 태그된다.


Reference: