
큰 틀에서 봤을 때 VCS(Version Control System)는 대부분 관리하는 정보가 파일들의 목록

이렇게 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 다루는 VCS를 델타 기반 VCS라고 함
그러나 Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하며 크기가 아주 작음

커밋을 할 때 파일이 달라지지 않았으면 파일을 새로 저장하지 않고 이전 상태의 파일에 대한 링크만 저장
Git은 데이터를 스냅샷의 스트림처럼 취급
거의 모든 명령이 로컬 파일과 데이터만 사용 → 네트워크에 있는 다른 컴퓨터는 필요 없음
프로젝트의 모든 히스토리가 로컬 디스크에 저장되어 있기 때문에 모든 명령이 순식간에 실행되며, 서버 없이 조회가 가능
Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리
체크섬을 이해하는 Git 없이는 어떠한 파일이나 디렉토리도 변경할 수 없음
체크섬이란 Git에서 사용하는 가장 기본적인 데이터 단위
체크섬은 SHA-1해시를 사용하여 만들어지며 40자 길이의 16진수 문자열
파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구함
Git은 모든 것을 해시로 식별 → 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장
체크섬 예시
24b9da6552252987aa493b52f8696cd6d3b00373
Git으로 무엇을 하든 Git 데이터베이스에 데이터가 추가 되며 되돌리거나 데이터를 삭제할 방법은 없음
커밋하지 않으면 변경 사항을 잃어버릴 수 있지만 스냅샷을 커밋하고 나면 데이터를 잃어버리기 어려움
Git은 파일을 Committed, Modified, Staged 이렇게 세 가지 상태로 관리
위 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결되어 있음
Git 프로젝트의 세 가지 단계는 Working Directory, Staging Area, Git Directory

Git Directory는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
Git의 핵심이며, .git폴더가 바로 Git Directory
이 안의 파일들은 **Committed** 상태
**Working Directory**는 프로젝트의 특정 버전을 Checkout 한 것
지금 작업하고 있는 디스크 내의 Git Directory 안에 압축된 데이터베이스에서 파일을 가져와 Working Directory가 구성됨
Staging Area는 Git Directory 내부에 존재
단순한 파일이며, 곧 커밋할 파일에 대한 정보를 저장
Git에서는 기술 용어로 ****“Index”****라고 함 (”Staging Area”라는 용어를 써도 상관 없음)
파일을 수정하고 이 안에 추가했다면 파일들은 Staged 상태
수정은 했지만 아직 Staging Area에 추가하진 않았다면 **Modified** 상태
기본적으로 Git을 이용해
와 같은 과정으로 작업을 진행
https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88
저도 오늘 git hub에 첨 올려봤는데 ㅎㅎ