[Git] git add 명령의 동작 원리
2022. 4. 22. 17:33ㆍGit
1. git init 다시 보기
git init 명령 수행시 변경사항 확인
$ mkdir git-test
$ cd git-test
$ git init
$ ls -al
$ ls -al .git/
git init 명령어를 수행하면 현재 폴더 아래에 [.git] 폴더가 생성됩니다. 이 폴더가 로컬저장소입니다.
2. git add와 git status 다시 보기
git hash-object <파일명>
일반 파일의 체크섬을 확인할 때 사용됨
git show <체크섬>
해당 체크섬을 가진 객체의 내용을 표시함
git ls-files --stage
스테이지 파일의 내용을 표시함
스테이지 파일은 git add 명령을 통해 생성되는데 .git/index 파일이 스테이지 파일임
파일 생성 및 워킹트리 상태 확인
git-test $ echo "cat-hanbit" > cat.txt
git-test $ git status
git status 명령은 워킹트리와 스테이지, 그리고 HEAD 커밋 세가지 저장 공간의 차이를 비교해서 보여줍니다. 현재 상태는 다음과 같습니다.
- 새로 파일을 생성할 경우 워킹 트리에만 해당 파일이 존재함
- 스테이지는 아직 비어있는 상태
- 커밋이 아직 한번도 하지 않았기 때문에 HEAD 커밋은 없음
파일의 체크섬 확인
git-test $ git hash-object cat.txt # 파일의 체크섬 확인
스테이지의 파일 추가
git-test $ git add cat.txt # 파일 스테이징
git-test $ git status # 파일 상태 확인
git-test $ ls -a .git # .git 폴더 확인, index가 생성되어 있음
git-test $ file .git/index # .git/index 파일의 정체 확인
git-test $ git ls-files --stage # 스테이지 파일의 내용 확인
- index는 스테이지의 다른 이름
- git ls-files --stage 명령어를 통해서 스테이지의 내용을 확인할 수 있음
git-test $ ls -a .git/objects/
git-test $ ls -a .git/objects/ff
git-test $ git show ff5bda
- [.git/objects] 폴더 아래에 ff/로 시작하는 폴더가 새로 생긴것을 알 수 있음
- [.git/objects/ff] 폴더 아래에는 5bda로 시작하는 파일이 하나 있는데 폴더명과 파일명을 합쳐보면 "ff5bda"입니다. 정확하게 앞에서 확인했던 체크섬 값입니다. [objects] 폴더 안에 존재하는 파일들은 Git 객체입니다.
- git show ff5bda 명령어로 해당 객체의 내용을 확인하면 cat-hanbit이라는 텍스트 파일이라는 것을 알 수 있습니다.
git cat-file 명령어
git cat-file -t <체크섬>
해당 체크섬을 가진 객체의 타입을 알려주는 명령어
git cat-file <객체타입> <체크섬>
객체의 타입을 알고 있을 때 해당 파일의 내용을 표시
체크섬을 이용한 객체의 상태 확인
git-test $ git cat-file -t ff5bda # 체크섬으로 객체의 종류 확인
git-test $ git cat-file blob ff5bda # 해당 객체의 내용을 출력
정리하며
- git add 명령은 워킹트리에 존재하는 파일을 stage에 추가하는 명령
- add 명령은 해당 파일의 체크섬 값과 동일한 이름을 가지는 blob 객체가 생성되고 이 객체는 .git/objects 파일에 저장됨
- 스테이지의 내용은 .git/index에 기록됨
References
source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저
'Git' 카테고리의 다른 글
[Git] git commit 명령의 동작 원리 (0) | 2022.04.22 |
---|---|
[Git] CLI로 rebase 수행 (0) | 2022.04.22 |
[Git] CLI로 3-way 병합하기 (0) | 2022.04.22 |
[Git] CLI로 checkout 하기 (0) | 2022.04.22 |
[Git] CLI로 브랜치 생성하기 (0) | 2022.04.22 |