깃 명령어 동작원리
GIT INIT: 깃의 시작
- head: 현재 체크아웃된 브랜치를 가리키는 포인터
- refs: 브렌치, 태그와 같은 참조들을 저장하는 폴더
- index: 스태이징 영역, 즉 메타 데이터와 오브젝트 데이터 저장하는 파일
- git add시 생성
- objects(객체): 모든 데이터를 저장하는 폴더, 여러 객체 저장
- tree: 커밋 시점의 인덱스의 스냅샷
- commit: 커밋 정보가 들어있는 객체
- blob: 파일 정보가 들어있는 객체, 작성한 소스코드가 파일 내용이 됨
GIT ADD&COMMIT
git add: 변경된 파일 스테이징 영역으로 올리기
- ADD시에 SHA-1 알고리즘을 통해 이러한 해시값을 얻을 수 있다
커밋 객체
- 커밋 객체는 파일의 스냅샷을 포함하는 트리 객체를 참조
- 커밋 객체는 이전 커밋과의 관계를 나타내는 parent 정보와 커밋 메시지 등을 포함
- 아래 이미지는 예시를 보여주고자 키값의 value값을 표시
트리 객체
- 파일 권한, 파일의 이름, 블롭 객체의 SHA-1해시 저장
- 트리 객체 내부 내용
Blob 객체 내용 확인 실습
- git ls-tree HEAD: 현재 브렌치의 최상위 트리 객체 해시값 확인
- git ls-tree <트리 객체 해쉬값>: 트리 객체가 포함하는 파일, 블롭 객체 해시값 확인
- git cat-file blob<블롭 객체 해쉬값>: 해당 블롭 객체의 내용을 출력
파일 수정후 blob내용 출력
- file1의 기존 내용에 “plus text”문자열 추가
- 이전 과정을 통해서 블롭 객체 해쉬값을구하고 내용 출력
- 변경 과정: 복사+수정내용, 비효율적인거같긴한데 이런식으로 처리하고있다.
- Git의 블롭 객체는 파일의 전체 내용을 저장
- 파일 내용이 변경될 때마다 새로운 블롭 객체가 생성되며, 이 블롭 객체는 파일의 현재 전체 내용을 포함
- 블롭 객체는 변경 사항의 부분적인 저장이 아니라 파일의 전체 내용을 저장
- 따라서, Git은 파일의 모든 변경 이력을 기록하지만, 각 블롭 객체는 특정 시점의 전체 파일 내용을 저장하므로, 블롭 객체가 변경 사항의 일부만 저장하는 것은 아닙니다.
GIT STATUS
로컬 작업과 인덱스, 커밋 트리 3개를 비교하며 변경사항을 보여준다
- 변경사항 x: nothing to commit, working tree clean
- 새로운 파일 존재: Untracked files
- 수정된 파일 존재, 스테이징 되지 않았을때: modified
출처
https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
Git - Git Objects
You will get a different hash value because of different creation time and author data. Moreover, while in principle any commit object can be reproduced precisely given that data, historical details of this book’s construction mean that the printed commi
git-scm.com
https://www.youtube.com/watch?v=N4hIR6XDKQo
우테크 테크톡: 해시, 다르의 깃 명령어 동작 원리
https://www.youtube.com/watch?v=jXtUUm92RiQ
우테크 테크톡: 망쵸의 유용한 Git 명령어
'기타' 카테고리의 다른 글
[기타] SW역량 테스트 B형 합격 후기 및 삼성 갤럭시 버즈 후기 (0) | 2025.02.05 |
---|---|
[API] 번역 API: DeepL 사용 및 Java에 적용 (0) | 2025.02.02 |
[SSAFY 12기 전공 서울 합격 후기] 코딩 테스트, 면접 준비과정 & 졸업 (2) | 2024.07.10 |
[POSTMAN] POSTMAN 이미지 업로드 에러 (0) | 2023.08.26 |