profile image

L o a d i n g . . .

Git의 핵심

- Git의 핵심은 데이터를 다루는 방식과 상태 관리

- Git은 파일 시스템 스냅샷으로 데이터를 취급함

- 파일이나 디렉토리의 변경 사항을 시간순으로 저장하는 대신, 파일 시스템의 현재 상태를 스냅샷으로 저장함

// 스냅샷: 특정 시점에서 파일, 폴더 또는 워크스페이스의 상태

// 스냅샷을 통해 특성 시점에 어떤 파일에 어떤 내용이 기록되어 있었는지, 폴더 구조는 어땠는지, 어떤 파일이 존재했는지 등 저장소의 모든 정보 확인 가능


차이가 아니라 스냅샷

델타 기반 버전 관리 시스템

- CVS, Subversion, Perforce, Bazaar 등의 시스템은 각 파일의 변화를 시간순으로 정리하면서 파일의 집합을 관리

- 이것을 보통 델타 기반 버전 관리 시스템이라고 함

시간순으로 프로젝트의 스냅샷 저장

- Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작음

- Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여김

- 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않고, 단지 이전 상태의 파일에 대한 링크만 저장함

- Git은 데이터를 스냅샷의 스트림처럼 취급


거의 모든 명령을 로컬에서 실행

- 거의 모든 명령어를 로컬파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터는 필요 X

- CVCS (중앙집중식 버전 관리 시스템)는 대부분의 명령어가 네트워크의 속도에 영향을 받는 것이 큰 차이점

- Git은 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령이 순식간에 실행

- 즉, 오프라인 상태이거나 VPN에 연결하지 못해도 막힘없이 일처리 가능


Git의 무결성

- Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리함

// 체크섬 (checksum, 검사합): 데이터의 오류를 검사하는 데 사용되는 일련의 숫자와 문자, 중복 검사의 한 형태, 오류 정정을 통해 공간 (전자 통신)이나 시간 (기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법

- 체크섬은 Git에서 사용하는 가장 기본적인 (Atomic) 데이터 단위이자 Git의 기본 철학

- Git은 SHA-1 해시를 이용하여 체크섬 생성

- 만든 체크섬은 40자 길이의 16진수 문자열

- Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장함


Git은 데이터를 추가할 뿐

- Git으로 뭘 하든 Git 데이터베이스에 데이터가 추가 됨

- 되돌리거나 삭제할 방법이 없다는 뜻

- Git은 파일을 Committed, Modified, Staged 세 가지 상태로 관리함

  • Committed: 데이터가 로컬 데이터베이스에 안전하게 저장되었음
  • Modified: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않음
  • Staged: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태

- 이 세 가지 상태는 Git 프로젝트의 Git 디렉토리 / 워킹 트리 / Staging Area 이렇게 세 가지 단계와 연결 되어 있음

워킹 트리 / 스테이징 영역 / Git 디렉토리


워킹 트리, Staging Area, Git 디렉토리

- Git 디렉토리: Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말함

  • Git 디렉토리에 있는 파일들은 Committed 된 상태

-다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리가 생성 됨

// 메타 데이터 (metadata): 다른 데이터를 정의하고 기술하는 데이터

 

- 워킹 트리: 프로젝트의 특정 버전을 Checkout 한 것

- Git 디렉토리는 지금 작업하는 디스크에 있고, 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와 워킹 트리 생성

 

- Staging Area: Git 디렉토리에 있음, 단순한 파일이고 곧 커밋한 파일에 대한 정보를 저장

  • 파일을 수정하고 Staging Area에 추가했다면 Staged
  • Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified

- Git 에서는 기술 용어로 Index 라고도 하지만 Staging Area 라는 용어 사용해도 상관 없음


Git으로 하는 일

  1. 워킹 트리에서 파일 수정
  2. Staging Area에서 파일을 Stage 해서 커밋할 스냅샷 생성
  3. Staging Area에 있는 파일들 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장

출처

1. https://coding-lks.tistory.com/162 - 스냅샷이란?

2. https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88https://heekangpark.github.io/git/vcs - Git 기초

3. https://nemomemoriaa.tistory.com/5 - 체크섬이란?

4. https://ko.savtec.org/articles/howto/what-is-a-checksum-and-why-should-you-care.html - 체크섬이란 무엇입니까 (그리고 왜 당신이 신경 써야합니까?)

5. https://ko.wikipedia.org/wiki/%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0 - 메타데이터

복사했습니다!