Git is free and open source distributed version control system
designed to handle everything from small to very large projects with speed and efficiency.
깃은 소스코드를 효과적으로 처리하도록 설계된 무료 오픈소스 소프트웨어
컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율
GIT INIT
터미널에서 git init 명령어를 입력하면 .git 디렉토리 생성됨
HEAD: 현재 체크아웃된 브랜치를 가리키는 파일
refs: 브랜치, 태그와 같은 참조들을 저장하는 폴더
index: 메타 데이터와 오브젝트 데이터 저장하는 폴더
objects: 모든 데이터를 저장하는 폴더. 이 디렉토리에 여러 객체를 저장한다.
tree: 커밋 시점의 인덱스의 스냅샷
commit: 커밋 정보가 들어있는 객체
blob: 파일 정보가 들어있는 객체. 해시 알고리즘의 결과 기준으로 파일 생성. 우리가 작성한 소스코드가 파일 내용이 됨
GIT ADD
작업 디렉토리에 있는 파일들이 변경되면 GIT이 감지
git add test1.txt
git add test2.txt
같은 내용을 커밋한다면?
같은 내용을 담고 있다면 같은 해시값이 나온다. 인덱스에는 추가되지만 objects에는 추가되지 않는다.
GIT COMMIT
인덱스 내용을 바탕으로 새로운 버전 생성
SNAPSHOT: COMMIT 시 그 시점의 정보(INDEX에 있는 파일)을 트리에 저장
GIT COMMIT 의 PARENT는 이전 커밋을 가리킴. 즉 각 버전(COMMIT)마다 다른 TREE를 담고 있음