Git 사용 해시 공간 절약

2311 단어 git

Blob의 주판.


우리는git가 파일 내용을 저장하는 방식은 내용을 압축하여 하나의 블로그 대상에 기록하는 것이고, 블로그 대상에 대응하는 경로는 파일 내용에 대한 해시를 구하는 것이라고 알고 있다.
예를 들어 우리는 a라는 내용을 가진 파일이 있는데 git는 a에서 해시를 얻은 후 78981922613b2afb6025042ff6bd878ac1994e85를 얻었다.Git는 이 해시 값을 통해 blob 대상의 주소를 확인합니다. 즉.git/objects/78/981922613b2afb6025042ff6bd878ac1994e85.
이렇게 하면 어떤 좋은 점이 있습니까?같은 내용은 같은blob 대상을 생성하고 같은blob 대응 파일을 작성합니다.즉, 만약 우리가 파일letter1이 있다면.txt 및 파일 letter2.txt는 같은 내용을 가지고 있습니다. 그러면 이 두 파일은 같은 블로브 대상을 공유합니다. 이렇게 하면 블로브에게 디스크 공간의 절반을 절약할 수 있습니다.

정신 차려?


"이렇게 하면 블로브에게 디스크 공간의 절반을 절약할 수 있다."하하, 너무 순진하다.만약 창고에 여러 개의 내용이 같은 파일이 동시에 존재한다면 이 항목도 버려질 것이다.
확실히 이런 같은 파일 내용의 장면은 매우 적다.그러나 주의해야 할 것은git는 버전 관리 시스템으로 전체 파일의 변경 역사를 추적한다.하면, 만약, 만약...txt의 내용이 100개 제출에서 변화가 없으면 우리는 99부letter1을 절약했다.txt에 대응하는blob 대상이 차지하는 디스크 공간입니다.
그러나 이것은git가 얼마나 훌륭한지 설명할 수 없다. 우리는git가 이렇게 하지 않으면 얼마나 멍청할지 상상할 수 밖에 없다.

더 큰blob


Blob는 공유할 수 있는데 어느 정도 하나의 사실에 의존한다. 그것이 바로 Blob 대상에 시간과 관련된 정보가 포함되지 않는다는 것이다.
Git는 더 큰 단위에서 공유를 실현했는데 그것이 바로 Tree 대상이다.만약 디렉터리에 변화가 발생하지 않았다면, 이 디렉터리에 대응하는 전체tree 대상도 계속 복용할 수 있습니다.마찬가지로 tree 대상에 시간 정보가 포함되지 않는다는 사실에 기초를 두고 있다.

초월하다


Git가 만약 이렇게 하지 않는다면, 우리는 그것이 바보라고 비웃을 것이다.그러나git가 이렇게 해서 우리는 그것이 얼마나 훌륭하다고 생각하지 않는다.
git를 뛰어넘는 것은 우리가 git보다 더 우습다는 것이 아니다. 사실 우리는 너무 평범하기 때문에 조금만 노력하면 평범하지 않게 보일 수 있다.
그러나 이 사상을 우리에게 가져오면 결과는 달라진다.어쨌든 너는 마땅히 있어야 할 작은 기교를 참고했을 뿐이지만, 이미 네가 생각하고 있다는 것을 알 수 있다.
가령 우리가 이런 일을 하고 있다면, 일정 시간마다 어떤 시스템의 설정을 백업해서 불시의 수요에 대비해야 한다.80퍼센트의 사람들이 공유 메커니즘이 없는git처럼 백업 파일 이름의 접미사로 긴 시간 스탬프를 쓴다. 다른 것은 우리가 어리석고 훌륭하지 않다고 말할 사람이 없기 때문에 이런 고급스러운 비판을 받아들일 자격이 없다는 것이다.
그러나 공유 메커니즘을 배운 우리는 더 좋은 방법을 생각해 낼 수 있을 것이다. 통계 분석을 통해 우리는 이 설정의 변동이 빈번하지 않다는 것을 발견했기 때문에 우리는 해시 인덱스 내용을 사용하여 디스크 공간을 절약하기로 결정했다.
나는 이 글을 python 원본 코드로 끝낼 것이다.
conf_string = collect_conf_string()     #  
conf_path = hash(conf_string)           #  

if not os.path.exists(conf_path):       #  , 
    save_conf(conf_string, conf_path)

add_record(time.time(), conf_path)      #  ( 、 ) , 

좋은 웹페이지 즐겨찾기