Git
https://git-scm.com/book/ko/v2/시작하기-버전-관리란%3F
챕터 1.1~1.4
1. 1 Version Control
Centralized VCS
협업을 위해 개발되었음.
모든 자원이 중앙의 서버에 집중됨 → 관리가 용이함
중앙의 서버에 문제가 생긴다면 모든 사용자가 사용할 수 없게 되고 각각의 사용자들이 작업하던 스냅샷만 남고 프로젝트의 전체 히스토리가 손실된다는 큰 단점이 있음.
Distributed Version Control Systems
클라이언트가 히스토리를 포함한 원격 저장소 전체를 로컬로 복사함(Clone의 의미)
→ 서버에 문제가 발생해도 클라이언트 하나의 데이터만 있으면 서버를 복원할 수 있음
CVCS로 불가능한 복잡한 방식의 작업을 할 수 있음.
1. 3 Git은 무엇인가?
기존 VCS와의 차이
- 기존의 VCS : 델타 기반 시스템; 시간에 따라서 파일이 변경된 부분만을 저장
- Git : 데이터를 스냅샷(온전한 전체 파일)의 연속된 흐름(stream)으로 취급함
- 파일에 변화가 있는 경우 파일 전체를 새로 저장함
- 커밋 → 파일의 현재 상태를 스냅샷(스크린샷을 찍듯이)으로 만들고 참조(reference, 일종의 링크)를 저장
- 파일에 변화가 없는 경우 저장되어 있는 이전의 파일에 대한 링크(참조)를 저장
Git은 일종의 파일 시스템으로 볼 수 있음
파일이 변경될때 마다 전체를 백업하는 방식으로 작동하기 때문
Commit, Modified, Staged
Git이 파일을 관리하는 세 가지 상태
- Commit : 로컬 데이터베이스에 데이터가 저장된 상태
- Modified : 파일이 수정되고 커밋하지 않은 상태
- Staged : 수정한 파일을 커밋한다고 표시한 상태
- .git : Git의 메타데이터와 데이터베이스가 저장됨
- Working Directory(Tree) : 커밋하지 않은 수정하거나 새로 추가한 것들이 위치하는 곳
- Untracked : 새로 추가하거나 무시하도록 .gitignore에 추가된 파일
- Tracked : git에서 관리되고 있는 파일
수정될 경우 .git에서 checkout되어 working tree로 오게 됨
- Staging Area : working tree에서 수정/추가한 것들 중 커밋한다고 표시한 것들이 위치하는 곳
- 보통 .git 폴더 안에 존재
- index라고도 불림
- commit 할때 이곳의 넘어온 변경사항들만이 Repository에 저장됨
Git의 작업 방식
1. Working Tree에서 파일 수정
2. 변경사항을 Stage해서 Staging Area에 임시적인 스냅샷을 저장
3. Commit해서 Staging Area에 있던 스냅샷을 .git의 영구적인 스냅샷으로 저장