[Git] (1)-Git이란?

Git 이란

소프트웨어 개발을 하다보면 다양한 협업 툴을 사용하게 된다. 그 중 가장 많이 쓰이고, 자주 쓰이는 것은 git이 아닐까 싶다. git이 무엇인지, 그리고 git의 활용방법에 대해 정리하고자 한다.

대부분의 내용은 git 공식사이트에서 읽을 수 있는 “Pro Git” 이라는 책의 내용을 요약한 것이다.

상세 내용은 다음의 웹사이트에서 확인할 수 있다.
https://git-scm.com/book/ko/v2

분산 버전 관리 시스템

Git은 대표적인 버전 관리 시스템 중 하나이다. 버전 관리라는 것은 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있도록 하는 것이다. 파일에 문제가 생기는 경우, 문제가 생긴 시점 및 원인을 추적할 수 있고, 문제가 생기기 전 상태로 파일을 되돌릴 수도 있다.

버전 관리 시스템에도 여러가지 종류가 있다.

  • 로컬 버전 관리
    • 로컬 데이터베이스에 파일의 변경 부분을 저장하는 방식
  • 중앙집중식 버전 관리
    • 서버 데이터베이스에 버전을 저장하는 방식
    • 클라이언트가 서버의 파일을 받아서 사용
    • 서버에 문제가 생기는 경우 치명적
    • 예시: SVN
  • 분산 버전 관리
    • 중앙집중식처럼 서버에 버전을 저장하는 방식이지만, 클라이언트가 단순히 마지막 스냅샷을 받아오는 것이 아니라 저장소의 히스토리를 모두 복제해오는 방식
    • 서버에 문제가 생기는 경우 클라이언트 저장소로 서버 복원 가능
    • 리모트 저장소가 많기 때문에 동시에 다양한 그룹과 다양한 방법으로 협업 가능
    • 예시: Git

스냅샷 형식의 데이터 관리

Git은 다른 버전 관리 시스템과는 차별화된 방법으로 데이터를 저장한다.

대부분의 버전 관리 시스템은 파일의 변화를 기록한다. 이를 델타 기반 버전 관리라고 한다. 보통 변화를 나타낼 때 ‘델타’ 기호를 쓰기 때문인 것으로 보인다.

예시:
abcdefg -> abdefg -> abdefgc 의 형태로 파일이 변화되는 경우, 델타 버전 관리에서는 다음과 같이 데이터를 저장한다.

File A = abcdefg, delta1 = 3번째 -c, delta2 = 마지막 +c

Git은 스냅샷의 형식으로 데이터를 저장한다. 위의 예시를 적용해 보면

File A0 = abcdefg, File A1 = abdefg, File A2 = abdefgc

와 같은 형식이 될 것이다. 여기까지만 보면 Git은 다른 버전 관리 시스템에 비해 훨씬 느리고, 많은 저장공간을 차지할 것처럼 생각된다. 그런데 실제로는 전혀 그렇지 않다. 어떻게 Git은 전체 스냅샷을 저장하는데도 불구하고, 작은 용량과 빠른 속도를 유지할 수 있을까? 이에 대한 정확한 답은 공식 문서에는 찾을 수 없었고, 다른 자료들을 통해 어렴풋이 이해할 수 있었다.

Git은 일단 파일을 모두 스냅샷으로 저장하고 적절한 시점에 마지막 스냅샷만 남기고 모두 델타로 저장한다고 한다. 즉, 다른 버전 관리 시스템이 최초의 스냅샷만 갖고 있는 것과는 다르게 Git은 마지막 스냅샷만 갖고 있다고 볼 수 있을 것 같다. 위의 예시로 보면 다음과 같다.

delta0 = 3번째 +c, delta1 = 마지막 -c, File A2 = abdefgc

브랜치(?)

이부분은 추후에 브랜치에 대해 이해한 이후에 업데이트 할 예정이다.

댓글남기기