티스토리 뷰
본 내용은 생활코딩 - 지옥에서 온 git을 보고 공부했습니다. 조언은 언제든지 감사합니다 !
.git이라는 디렉토리에는 git이 수행하는 버전 관리 내용들이 담겨있다.
그 중 add를 했을 때 .git에서 일어나는 변화는 index와 objects에서 일어난다.
index
add한 파일의 이름이 담겨있다.
다른 정보들은 암호화처럼 되어 있어서 알 수 없지만 test1.txt나 test2.txt같은 파일의 이름은 확인할 수 있다.
objects
add한 파일의 내용이 담겨있다.
겉으로 보기에는 저게 파일의 내용인지 알 수 없지만 이는 sha1 hash 알고리즘 때문이다.
위의 내용들을 gistory라는 오픈소스 프로그램을 사용하면 보기 쉽게 분석할 수 있다. https://github.com/egoing/gistory
분석한 내용을 정리해보면 git은 파일의 내용 압축한 뒤 sha1과 다른 부가적인 알고리즘과 함께 해쉬화 하여 관리한다. 때문에 만약 파일의 내용이 같다면 이 해쉬화 한 정보(문자열)도 같게 된다.
이 hash를 통과한 내용이 바로 objects 안에 만들어지는 디렉토리+파일 명 이다.
예를 들어 위에서 objects/10/d1266...b77이라는 디렉토리와 파일이 있다. 여기서 objects 뒤에 /를 뺀 10d1266...b77이 sha1 hash 알고리즘을 통과한 파일의 내용이 된다.
그리고 이 hash된 내용이 index에 파일 명과 같이 놓이게 된다.
여기서 중요한 점이 바로 내용이 같으면 hash 값도 같아지게 된다는 것이고, 만약 어떤 파일의 내용을 복사한 다른 이름의 파일을 만들 경우 두 파일의 내용은 같아지기 때문에 hash 값도 당연히 같아지고 objects 디렉토리에는 복사한 파일의 내용이 만들어지지 않는다.
index에는 복사한 파일의 이름은 만들어지지만 그 파일이 가리키는 내용은 복사된 파일의 내용과 같기 때문에 같은 objects의 디렉토리를 가리키게 된다.
이는 유사하게 코딩에서의 객체 참조 개념인 것 같다. 파일의 이름은 객체를 참조하는 변수인 것이고 파일의 내용은 객체가 되겠다.
python으로 표현하면
test1.txt = test2.txt = 123
이 되어 123이라는 객체가 메모리에 2개가 만들어 지는 것이 아니라 1개가 만들어 지고 두 변수가 동시에 그 메모리를 참조하는 것 같은 개념이지 않을까 싶다.
따라서 디렉토리 이름도 objects = 객체 로 만든 것 같다.
이러한 알고리즘 덕에 git은 중복되는 데이터들을 효율적으로 저장할 수 있게 된다.
'Git 공부' 카테고리의 다른 글
Git branch (0) | 2019.03.10 |
---|---|
Git commit의 원리, 저장소 관계 (1) | 2019.03.09 |
Git 변경사항 확인 git log -p, git diff (0) | 2019.03.09 |
Git stage area (0) | 2019.03.08 |
Git 버전 생성 (0) | 2019.03.08 |
- Total
- Today
- Yesterday
- Thymeleaf
- git branch
- 스프링 mvc
- Gradle
- 스프링 컨테이너
- 파이썬 for Beginner 솔루션
- 쉘 코드
- 방명록 프로젝트
- Computer_Networking_A_Top-Down_Approach
- Spring Data JPA
- git merge
- 프로그래머스
- 스프링
- 지옥에서 온 git
- JPA
- 파이썬 for Beginner 연습문제
- 선형 회귀
- 김영환
- Do it! 정직하게 코딩하며 배우는 딥러닝 입문
- Spring
- 생활코딩 javascript
- Spring Boot
- 패킷 스위칭
- 스프링 테스트
- Python Cookbook
- 쉽게 배우는 운영체제
- spring mvc
- git
- jsp
- 운영체제 반효경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |