기록되지 않은 아이디어는 실행되지도 않는다. 이는 기록의 중요성을 함축적으로 표현
이에 나온 것이 버전 관리다. 소스코드 관리를 위하여 팀 단위로 개발 중인 소스 코드나, 청사진 같은 설계도 등의 디지털 문서를 관리한다.
버전을 통해서 시간적으로 변경사항과 작업자를 추적
버전 관리의 필요성
- 자료의 백업 및 복구
- 개정 내용 파악
- 변경 내용 추적
- 작업자 추적
- 개정 작업
- 병합 작업
- 협업에 의한 통합
클라이언트-서버 모델
- 클라이언트-서버 모델은 서버에서 저장소를 관리하고 클라이언트는 저장소의 일부분만 가져다가 작업하는 형태
- 서버에서 저장소의 모든 파일을 관리하고 처리
- 서버와 클라이언트가 항상 연결되어 있어야 정상적인 작업을 수행하며 연결이 되어 있지 않으면 작업에 제한이 있음

분산 모델
- 분산 모델은 클라이언트에서 서버와 동일한 독립적인 저장소를 가지고 작업하는 형태
- 클라이언트에서 서버의 저장소에 대한 동일한 정보를 가지고 있으므로 서버와 연결이 되어 있지 않아도 작업을 처리할 수 있음

Git이란?
- 2005년 리눅스 커널 개발자인 리누스 토발즈가 개발
- Git은 소프트웨어 개발에서 버전 관리를 위한 도구
- Git은 분산 버전 관리 시스템
- 개별 작업자가 중앙화된 코드 호스팅 시스템에서 독립적으로 일하고 프로젝트 저장소의 개별 로컬사본에서 작업을 수행
Git의 특징
- 분산 서버 관리 시스템
- 로컬과 원격에 분리된 저장소 관리
- 변경 내역 추적
- 브랜치 생성
- 브랜치 병합
- 병합 충돌 감지
Git의 기능
- Git의 데이터는 파일 시스템의 스냅샷
- Git은 시간순으로 파일의 스냅샷을 저장
- Git은 대부분의 명령을 로컬에서 수행
- Git은 오프라인 상태에서도 작업 가능
- Git은 데이터 무결성을 위해 SHA-1 해시를 사용하여 체크섬을 만듦
- 대규모 프로젝트를 위한 완전한 분산 환경 지원
- 체크섬은 해시(SHA-A)로 40자 길이의 16진수 문자열
Git 장점
- 분산 환경에서 저장소 관리
- 로컬 저장소에서 파일 생성 및 수정
- 로컬 저장소에서 수정 내역 추적
- 원격 저장소에 적용된 내용를 동일하게 로컬 저장소에 적용
- 원격에 영향을 끼치지 않는 브랜치 생성
- 버전 관리 및 이슈 추적 용이
Git 용어
저장소 (Repository)
- 이력을 관리하는 저장소
- 로컬 저장소(Local Repository): 개인 전용 저장소 (클라이언트에 속함)
- 원격 저장소(Remote Repository): 공유 저장소
변경 이력 관리 (History)
- 커밋 단위
- 40자리 해시키로 관리
- 날짜, 시간, 커밋 메시지, 작업자
- 브랜치 형태로 관리
Git의 상태 관리

- Committed: Staged 상태에서 커밋이 되어서 Git DB에 안전히 저장. 데이터가 로컬 DB에 안전하게 저장된 상태
- Staged: Un-tracked 상태에서 Tracked 상태로 이동하면 Staged상태로 변경. 현재 수정한 파일을 곧 커밋할 것이라고 표시
- Modified: Staged에서 수정하면 Modified. 수정한 파일을 DB에 커밋하지 않은 상태
Git 작업영역

작업폴더: Working Directory
준비영역: Staging Erea. 인덱스 영역이라고도 함
저장소: Git Directory
Git의 작업 흐름
1. 저장소 만들기

2. 파일을 생성하고 커밋하기

3. 원격 저장소에 저장하기

4. 분기 (Branch)
