본문 바로가기

회고

[스터디 회고] 커밋은 스냅샷이다. 다른 점이 아니다! Commits are snapshots! not diffs!

반응형

https://github.blog/2020-12-17-commits-are-snapshots-not-diffs/

위 블로그 글을 읽고 코드숨 커뮤니티와 스터디를 진행했습니다.

 

Commits are snapshots, not diffs - The GitHub Blog

Git has a reputation for being confusing. Users stumble over terminology and phrasing that misguides their expectations. This is most apparent in commands that “rewrite history” such as git cherry-pick or git rebase. In my experience, the root ca

github.blog

 

'📹 CCTV는 하루종일 영상을 찍어 보관하는데 메모리를 어떻게 감당할까?' 라는 생각을 해본 적이 있는가?

 

CCTV는 벽과 건물 등 움직이지 않는 부분은 배경으로 인식해 메모리 낭비를 줄인다.

만약 사람이 지나가면 그 부분만 따로 객체로 인식해 저장한다.

오늘 스터디를 하면서 불현듯 스친 생각이다. 커밋도 비슷한 방식으로 동작한다.

커밋은 CCTV 영상의 전체화면 스냅샷이다.

그런데 그 전체화면에는 방금 바뀐 생생한 부분이 있는가 하면, 며칠전에 저장된 오래된 부분이 있을 수도 있다.

 

커밋이 왜 스냅샷인가?

 

커밋은 디퍼런츠만 단순히 따로 저장하는 것이 아니라 변경되지 않은 부모도 참조한다.

첫번째처럼 보이지만, 실상은 요런 두번째 느낌으로 이해했다.

첫 번째 케이스처럼 diffs만 따로 커밋2에 저장하는 것 처럼 보이지만 실상은 두 번째 케이스와 비슷하다.

따로 떨어져있는 것 같지만 연결되어있다.

 

만약 커밋이 diff라면 2번째 커밋을 가리킬 때는 회색부분밖에 보이지 않아야 할 것이다.

두번째 커밋에서 첫번째 커밋과 공통된 부분은 "어, 그거? 전에 설명해놨어 여기로 가봐" 하고 가리켜준다.

그래서 Head가 2번째 커밋을 가리킬 때 첫 번째 커밋했던 부분까지 한꺼번에 볼 수 있는 것이다.

 

세번째 커밋이 만들어졌을 때 만약 1번째 커밋 이후에 2,3까지 변경되지 않은 부분이 있다면 "그건 여기란다" 하고 길을 제시해주며, 커밋 1을 가리킨다.

 

커밋은 단순한 스냅샷이 아니라 전 스냅샷들과 긴밀히 연결되어있는 3d 퍼즐처럼 생긴 스냅샷이었던 것이다.

굳이 다시 설명할 필요 없는 부분을 전의 스냅샷과 연결해놓은 3d 퍼즐 스냅샷이다.

 

head : 현재 브랜치를 가리키는 것

브랜치는 커밋을 가리킨다.

반응형