[git] git 개념 정리.

2023. 8. 1. 22:57Tool/git

728x90
728x90

Git ?

  • 컴퓨터 파일의 변경사항을 추적하고 사용자들 간에 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다.

Git 작업 환경의 종류.

  • CLI : 리눅스 베이스의 터미널에서 Git 작업을 수행.(Git bash ...)
  • GUI : GUI 도구에서 Git 작업을 수행. (Sourcetree,  GitKraken, TortoiseGit …)

스냅샷 스트림 ?

  • Git은 특정 시점의 저장소의 파일 시스템 전체 상태를 스냅샷으로 저장(Commit)한다.
  • Git은 전체 상태를 스냅샷으로 저장함에도 사이즈가 작고 속도가 빠르다.
  • 마지막 스냅샷만 통째로 저장한다.
  • 파일이 달라지지 않았으면 파일을 새로 저장하지 않는다.
  • 즉, 이전 상태의 파일에 대한 링크만 저장하기 때문에 사이즈가 작고 속도가 빠르다.
스냅샷 스트림

분산 버전 관리 시스템 ?

  • 분산형 버전 관리 시스템은 하나의 저장소(Repository)가 아닌 분산된 여러 곳의 저장소를 통해 형상관리를 하는 것이다.
  • 원격 저장소(Remote repository)를 복제(Clone)한 Folk된 저장소나 개인 저장소(Local repository)에 최신 버전의 파일과 과거 히스토리 등 모든 데이터를 가지고 작업한다.
  • 원격 저장소에 문제가 생겨도 복구가 용이하다.
  • 각자 분리된 작업 영역을 가지게 된다.
분산 버전 관리 시스템의 구성도

Git의 영역 구분.

  • Working Directory(작업 영역) : 현재 개발되는 파일들 존재.
  • Staging Area(준비 영역) : 로컬 저장소에 커밋하기 전의 준비 영역으로 Git 저장소의 변경이력에는 어떤 영향도 주지 않음.
  • Local Repository(로컬 저장소) : 수정한 파일이 저장되고 버전이 저장된 영역.
  • Remote Repository(원격 저장소) : 협업을 위한 최종 저장소.(github, gitlab ...)

Git 작업 흐름.

1. 원격 저장소에 반영하기

  • Working Directory 에서 파일을 수정 →  MODIFIED 상태
  • 커밋할 내용들을 Staging Area에 반영하기($git add)  →  STAGED 상태
  • Staging Area에 파일들을 Local Repository에 스냅샷 및 델타 저장하기($git commit) →  COMMITED 상태
  • Local Repository에 커밋된 내용 Remote Repository에 반영하기($git push)

2. 원격 저장소에 반영된 소스 받아오기

  • Remote Repository에 반영된 정보 Local Repository 받기($git fetch)
  • Local Repository에 반영된 정보 Working Directory에 받기($git merge)
  • 또는 git pull 명령어로 원격 저장소에 반영된 소스 Working Directory 한번에 받기 ($git pull : fetch + merge)
Git 영역, 작업 흐름의 예시

Git 브랜치(Branch) ?

  • 브랜치란 독립적으로 어떤 작업을 진행하기 위해 특정 커밋을 기준으로 분리하는 것이다.
  • 필요에 의한 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.
  • 역할에 따라 브랜치를 분리하여 사용한다. (Ex. MAIN, DEVELOP, FEATURE …)
  • 브랜치는 다른 브랜치와 병합(Merge)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있다.
  • merge전에 pull request를 사용하여 관계자들에게 수정 내역을 공유하고, 코드 리뷰를 진행할 수 있다.
  • merge가 완료되면, push를 진행하여 배포한다.
Git 브랜치

프로젝트에서 사용되는 브랜치 구분의 예시.

  • MAIN : release시 사용하는 메인 브랜치이다. Tag를 통해 버전을 관리한다.
  • DEVELOP : 다음 release 버전을 개발하는 브랜치이다.
  • FEATURE: DEVELOP 브랜치에서 기능을 구현할 때 사용하는 브랜치이다.
  • RELEASE  : QA를 통해 발견된 수정 사항을 작업하는 브랜치이다. 작업 이후 MAIN 브랜치에 merge한다.
  • HOTFIX  : release된 상황에서 긴급으로 수정이 필요한 경우에 사용하는 브랜치이다.
브랜치 구분 예시

브랜치의 병합(Merge) 케이스의 예시.

  • case1. main 브랜치에서 hotfix 브랜치를 병합하는 경우, master 커밋의 포인터만 이동하여 병합할 수 있다.
merging
  • case2. main 브랜치(C4)와 iss53 브랜치(C5)를 병합할 경우, C2 C4,C5를 비교하여 병합하고 그 내용을 커밋(C6)한다.
3-way merging

 

728x90
728x90