[Zero-Base DS]스터디노트_Git(1)

주요 학습내용
1. Git 이란
2. Git 기본 용어
I. Git 이란?
🙌
- Git : 버전관리 시스템의 한 종류
- 버전관리 시스템(형상관리)
- Configuration Management Systems
- Version Control Systems
- 버전관리를 해야하는 이유
- 프로그램을 짜게되면, Source Data가 나오게 됨, 그리고 해당 프로그램을 작업하는 동안 계속 늘어나거나 줄어들며 수정되는 것들을 History(이력)라고 함
- 버전관리 시스템은 그 파일에 대해서 데이터, 이력을 관리 해줄 수 있음
- 이를 기반으로, 협업/작업추적/복구 등이 가능
1. Git 등장 배경
- 예전에는 Source Folder + 실행파일을 버전별로 카피하여 관리, 하루종일 개발한 코드가 컴퓨터가 다운 되면서 날아가버리는 문제가 종종 발생
- ① 파일 버전을 관리하자 -> Local Version Control Systems 탄생
- 단점
- 사용 컴퓨터 하드가 날아가면 전체 코드 사라짐
- 버전은 관리되지만, 협업은 여전히 어려움
- ② 중앙에서 관리하자 -> Centralized Version Control Systems
- 단점
- 협업은 가능해졌지만, commit하는 순간 배포되어 다수에게 버그 유발 가능(서버로 바로 commit)
- 인터넷이 안되면 작업이 불가능
- 자신만의 version history를 가질 수 없음
- ③ 단점들을 보완해서 나옴 -> Distributed Version Control Systems
- 특징
- commit 하더라도 개인저장소 내에 적용됨(다른 개발자에게 영향 없음)
- 원하는 순간에 배포(push)가능
- 오프라인에서도 작업 가능
- 자신만의 version history 가짐
2. 버전관리 시스템의 종류
- 중앙관리
- CVCS - CVS, SVN, etc
- 1) CVS
- 1980녀대 만들어진 형상관리 시스템
- commit 중 오류 발생 시 Rollback이 되지 않는 등의 문제
- 이후 SVN으로 대체됨
- 2) SVN
- 2000년대에 만들어짐
- 중앙관리지만 분산처리되는 부분도 많이 들어가있어(중앙관리 시스템의 단점 보완) 있어 현재까지도 사용하는 회사 많음
- 분산관리
- DVCS - Mercurial, Git, etc
- 1) Git
3. Git 기반의 서비스
- 1) Github
- https://github.com
- Git을 호스팅 해주는 웹 서비스, 협업을 위한 기능을 제공
- 🙌 (참고) 소스코드 보안이 중요한 경우 사용을 기피함
- 비용이 조금 더 비쌈
- 2) Gitlab (Github와 사용법 유사)
- https://gitlab.com
- 설치형 버전관리 시스템, 소스코드 보안이 중요한 기업에서 주로 사용
- 클라우드 버전 관리 시스템, 10명 이하 무료(Github와 유사)
- Issue tracker, Git Remote Repositorym API, Team, Group 기능 제공
II. Git 기본용어
1) Repository
- (프로젝트 단위)소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간
- Local Repository와 Remote Repository로 구분
2) Checkout
- 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
- Checkout 대상 - Branch, Commit, Tag
- Checkout을 통해 과거 여러 시점의 코드로 이동이 가능
3) Stage
- 작업할 내용이 올라가는 임시저장영역
- 이 영역을 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음
4) Commit
- 작업할 내용을 Local Repository에 저장하는 과정
- 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남김
- 권장 - commit 자주 해주기
- 참고 - commit 단위나 commit log format을 정해놓은 회사나 팀도 있음
5) Tag
- 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
- Tag가 붙은 commit은 commit id(version)대신 tag name으로 쉽게 checkout 가능
6) Push
- Local Repository의 내용 중, Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
- 권장 - Push하는 순간 다른 개발자들도 영향을 받기 때문에 검증되지 않은 코드는 Push하지 않도록 함
7) Pull
- Remote Repository에 있는 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
- 다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
- 참고 - Push 과정에서 Conflict(충돌)이 일어나서 Push가 거절된 경우, Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 Conflict를 해결한 뒤 다시 Push를 시도해야 함
8) Branch
- 특정 시점(commit 단위)에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
- 개발의 주축이 되는 branch를 master branch(혹은 main branch)라고 함
- 모든 branch는 최종적으로 다시 master branch에 merge(병합)되는 형식으로 진행 됨
9) Merge
- Branch의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정
- Merge되는 두 Branch는 주종관계가 성립
- 예) dev branch를 main branch에 merge
- Merge되는 과정에서 Conflict(충돌)이 발생하는 경우 Diff를 수정하여 Conflict를 해결한 뒤 Merge를 진행 할 수 있음
[자료 출처] 제로베이스 데이터 스쿨