Study/Git

Git의 원리

momong'-' 2020. 3. 2. 03:14

Git의 원리 배우는 이유

- 배우고 싶은 인간의 본능

- 생각보다 어렵지 않음. 원리를 알면 공부에 도움이 됨(기억이 오래감, 속도향상, 응용가능)

- git의 사용자 -> 많은 영감을 얻을 수 있음

 


gistory 설치

gistory

: 오픈 소스.

쉽게 git의 내부를 볼 수 있음.

웹으로 돌아감.

.git이라는 디렉토리 내용들을 리스트로 보여줌

변경되거나 추가된 파일이 위에 뜸 -> 클릭하여 상세 내용 추적 가능

 

1) python 설치

http://python.org/

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

2) pip(Python Package Index)로 설치

Window일 경우

pip install gistory

 

 

git이 잇는 디렉토리로 들어간 뒤 gistory 입력하고 결과에 있는 숫자를

웹으로 들어가서 localhost:숫자 입력하면 gistory 뜨면 설치 성공


Git add의 원리

gistory: gistory로 이동

Ctrl + c: gistory 종료

 

git add f1.txt를 했을 경우

index파일과 objects/.....파일이 추가됨

objects/...: objects(객체)

objects파일은 f1.txt 안에 잇는 내용이 적혀있음. 편의성을 위해 적혀있으나 실제로 적혀있는 건 아님

실제로는 index파일에 적혀잇음

index에 들어가면 적힌 글은 긴 숫자와 영어 조합으로 된 파일(objects)에 내용이 담겨 있다는 뜻임.

 

cp f1.txt f3.txt를 하면 object가 새로 생성되지 않고, f1과 f3가 같은 object를 가짐

=> git은 중복 제거

아래 사진과 같은 느낌


objects 파일명의 원리

내용이 같으면 objects의 파일명이 같다.

 

goole에 "sha1 online"검색 후 페이지에 들어가서 확인

http://www.sha1-online.com/

 

SHA1 online

sha-1 md5 md2 md4 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru gost adler32 crc32 crc32b haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 ha

www.sha1-online.com

 

git은 우리가 저장한 파일의 내용을 sha1이라는 hash 알고리즘을 통과시켜 그 파일의 이름을 도출한 다음에 이 파일의 정보, 이 hash값 앞 두글자을 따서 하위 파일을 만들고 뒤 그 다음 글자로된 파일을 만들어서 hello라는 내용을 저장함

=> hello라는 내용의 파일은 objects/aa/f4c6..

추가 정보가 더 저장될 수 있으므로 실제 값은 다를 수도 있음.


commit의 원리

commit 후 gistory 확인하면 여러 파일이 생성 됨.

 

objects/...(objects): commit 메세지가 적혀있음 tree는 commit한 파일의 정보

 

파일을 수정하고 commit을 다시 하면 tree 아래 parent가 생김 parent는 이전 버전. tree 값이 달라짐(수정된 파일 objects값 변경)

=> tree를 통해 버전이 만들어진 시점에 프로젝트 폴더에 대한 상태를 알아낼 수 있음(버전이 만들어졌을 때 스냅샷)

 

[정리]

objects라는 디렉터리 안에 들어가 있는 파일은 objects 파일이고

objects은

- 파일의 내용을 담고있는 blob

- 어떤 디렉토리의 파일명과  그 파일명에 해당되는 blob에 대한 내용을 답고있는 tree

- commit

이 세가지로 구성되어 있음

 


status의 원리

 

index에 있는 내용와 commit을 했을 때 objects 안에 있는 내용이 일치할때

=> status: commit할게 없다

내용이 다르다면 commit 대기상태인 것을 알 수 있음..

 

구글이미지에 "git working directory vs index vs repository" 검색해 이해하기

 

- working directory

- index, staging area, cache

- repository