alt
Home Git 델타와 스냅샷
Post
Cancel

Git 델타와 스냅샷

Git: 델타와 스냅샷

: git에서 커밋을 저장하는 방식


  • 과거에는 오픈소스 프로젝트를 diff와 patch를 통해 개발했다. 코드를 수정하고 diff 프로그램으로 델타를 생성해 전달하고 patch 프로그램으로 메인 코드에 적용했다고 한다.
  • 현재는 git을 사용하면 스냅샷델타를 통해 변화된 사항을 관리한다.
    • 한 브랜치의 히스토리에서 보이는 커밋은 델타 혹은 스냅샷


델타란?

: 커밋과 커밋 사이에서 변경된 사항을 델타라고 한다.

git_delta

  • git push를 했을 때 몇개의 델타가 있는지를 보여준다.

  • 모든 commit을 스냅샷으로 저장하면, 변동사항이 없는 부분까지 중복으로 관리하는 것이 되기 때문에 이러한 방식으로 관리
  • git diff를 쳐서 봤던 것이 델타
    • commit 1 -> commit 2 -> commit 3 이라고 할 때 git diff commit3 commit1 와 같은 요청을 하면, commit 2 델타(diff)와 commit 1 델타를 적용해서 반환해주는 것
  • 그렇다면 어느 시점에 델타로 변할까?


델타가 되는 시점

  • 일단 커밋 하나가 있다면 이는 스냅샷으로 저장된다. 추후에 데몬스레드에서 돌고있는 GC에 의해 적정 시점에 기존의 사항들이 델타로 변경되는 것

    • 뿐만 아니라, gzip으로 압축해 저장하기 때문에 실제로는 아주 효율적이라고 함

    • git gc : 데몬스레드에 의해서가 아니라 직접 gc를 돌리고 싶다면 이 CLI를 사용

      git_gc

      • 직접 저장공간을 압축한 것
  • GC가 돌면서, 마지막 버전의 커밋만 스냅샷으로 두고, 나머지는 델타가 된다.

    • 대부분의 경우 우리가 날리는 질의는 마지막 버전에 대한것이기 때문에
  • 그런데, 어떠한 경우에도 마지막 버전만 스냅샷, 나머지는 델타인 것은 아니다.

    모든 변경사항을 델타로만 저장하기에는, 변경된 부분이 너무많을 때 오히려 스냅샷으로 저장하는게 이득인 경우

    • TODO : 직접 확인해보기 git verify-pack -v .git/objects/pack/pack-~~~ 제대로 보는 법 알아보기



Reference)

http://dogfeet.github.io/articles/2012/git-delta.html

This post is licensed under CC BY 4.0 by the author.