[git] git 개념 정리.
2023. 8. 1. 22:57ㆍTool/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 브랜치(Branch) ?
- 브랜치란 독립적으로 어떤 작업을 진행하기 위해 특정 커밋을 기준으로 분리하는 것이다.
- 필요에 의한 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.
- 역할에 따라 브랜치를 분리하여 사용한다. (Ex. MAIN, DEVELOP, FEATURE …)
- 브랜치는 다른 브랜치와 병합(Merge)함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있다.
- merge전에 pull request를 사용하여 관계자들에게 수정 내역을 공유하고, 코드 리뷰를 진행할 수 있다.
- merge가 완료되면, push를 진행하여 배포한다.
프로젝트에서 사용되는 브랜치 구분의 예시.
- MAIN : release시 사용하는 메인 브랜치이다. Tag를 통해 버전을 관리한다.
- DEVELOP : 다음 release 버전을 개발하는 브랜치이다.
- FEATURE: DEVELOP 브랜치에서 기능을 구현할 때 사용하는 브랜치이다.
- RELEASE : QA를 통해 발견된 수정 사항을 작업하는 브랜치이다. 작업 이후 MAIN 브랜치에 merge한다.
- HOTFIX : release된 상황에서 긴급으로 수정이 필요한 경우에 사용하는 브랜치이다.
브랜치의 병합(Merge) 케이스의 예시.
- case1. main 브랜치에서 hotfix 브랜치를 병합하는 경우, master 커밋의 포인터만 이동하여 병합할 수 있다.
- case2. main 브랜치(C4)와 iss53 브랜치(C5)를 병합할 경우, C2 C4,C5를 비교하여 병합하고 그 내용을 커밋(C6)한다.
728x90
728x90
'Tool > git' 카테고리의 다른 글
[Git] 로컬 환경의 프로젝트를 GitLab 서버에서 관리하는 방법. (0) | 2024.09.10 |
---|---|
[git] push / pull할 때, "fatal: refusing to merge unrelated histories" 에러 해결 방법. (0) | 2023.02.09 |