git은 그럼 각 파일을 sha로 단방향 암호화 한 blob파일로 가지고 있다는 것이잖아요?
그런데 merge 시 뒤에서 설명해주시는 걸 보면 line by line으로 비교하여 conflict를 해결하는데, 그 말은 각 파일의 각 라인을 각기 다른 sha 변환 값으로 저장한다는 것인가요?
가령,
a
b
c
a
b
d
x
y
z
라는 세 파일이 있을 때 1,2번은 2번 line까지는 같으니 더 '유사한' blob이 되는거고 마지막 파일은 완전히 다른 blob이 되는건가요?
그리고 만약 각 라인을 모두 sha를 통과시켜 해쉬값으로 저장한다면 .git의 용량은 원 프로젝트 용량보다 크거나 비슷하게 되는걸까요?
깃의 수많은 버전들은 모두 다른 내용을 가지고 있다. git은 수많은 버전들은 파일명, 만들어진 날짜순으로 보관하는게 아니라 sha-1이라고 부르는 특정 해쉬 알고리즘을 통과한 값을 기준으로 저장하기 때문이다.
이러한 알고리즘은 회원가입 시스템을 구비하고있는 사이트 관리자가 사용자의 개인정보를 md5를 통과시킨 해쉬값으로 저장하고 있는것과 비슷한 원리다. 거대한 데이터를 40자밖에 안되는 고유한 이름을 지니게 할 수 있어 기존의 스냅샷의 중복을 최소화시킬 수 있다.