깃 명령어 동작원리
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
https://www.youtube.com/watch?v=N4hIR6XDKQo
우테크 테크톡: 해시, 다르의 깃 명령어 동작 원리
https://www.youtube.com/watch?v=jXtUUm92RiQ
우테크 테크톡: 망쵸의 유용한 Git 명령어
'기타' 카테고리의 다른 글
[SSAFY 12기 전공 서울 합격 후기] 코딩 테스트, 면접 준비과정 & 졸업 (2) | 2024.07.10 |
---|---|
Ubuntu 20.04서버 대기 모드로 들어가는 문제 해결 (0) | 2024.05.23 |
[POSTMAN] POSTMAN 이미지 업로드 에러 (0) | 2023.08.26 |