Swimmer

[Git 스터디 2] Git 기초 본문

개념공부/기타

[Git 스터디 2] Git 기초

Zach Choi 2023. 5. 23. 11:33

본 내용은 Git 공식 홈페이지에 무료로 공개된 Pro Git 서적 내용을 정리하였습니다.

Reference : https://git-scm.com/book/en/v2

 

Git은 SW개발자라면 사실 모르면 안되는 개념 ㅎㅎ. 엄청나게 유용하기 때문에 널리 쓰인다. Git이 개발 생산성에 기여하는 바가 상당히 크다.

 

Git 기초

Git이 무엇이고 어떻게 동작하는지 이해가 필요하다. Git은 다른 로컬 버전관리, 중앙집중식 버전관리랑은 구성이 상당히 다르고 분산 버전 관리 시스템들과도 정보를 취급하는 방식이 다르다. 따라서 Git이 데이터를 취급하는 방식을 이해하는 것이 필요하다.

 

Git 은 변경 내역이 아니라 스냅샷을 저장한다.

Git이 다른 분산 버전관리 시스템과 가장 큰 차이는 데이터를 다루는 방식이다. 대부분 분산 버전관리 시스템은 파일들의 변경 내역을 시간 순으로 기록하고 파일의 집합을 관리한다. (이를 델타 기반 버전관리 시스템이라고 지징한다.) 아래 그림을 보면, Version 2에서는 File A와 File C의 변경내역 자체만 저장한다. 그리고 Version 3에서는 File C의 변경 내역 자체만 저장한다.

 

하지만 Git은 시간에 따라 파일 변경 내역이 아닌 시스템 스냅샷을 저장한다. 변경내역이 있는 파일은 변경된 파일을 스냅샷으로 저장하고, 변경 내역이 없는 파일은 이전 상태 파일에 대한 링크만 저장한다. 즉 Git은 데이터를 스냅샷의 스트팀으로 취급한다.

 

Git은 대부분의 명령을 로컬 데이터 베이스에서 실행한다.

Git은 서버로부터 데이터 베이스 전체를 로컬로 복사한다. 그래서 대부분 명령이 로컬에 저장된 파일과 데이터만 사용하기 때문에 서버나 네트워크에 연결된 다른 컴퓨터가 필요 없다. 따라서 로컬 디스크에 저장된 파일과 데이터만 필요하므로 명령 실행속도가 굉장히 빠르다. 또한 로컬 컴퓨터가 오프라인 상태이더라도 작업을 지속할 수 있는 것이 장점이다. (중앙집중식이라면 오프라인일 때 작업이 불가능하다.) 

 

서버와 통신하는 명령어는 Push나 Fetch 정도가 되겠다.

 

Git의 무결성 (잘 이해 못함)

Git은 데이터를 저장할 때 체크섬을 계산하고, 체크섬으로 데이터를 관리한다. Git은 SHA-1 해시를 사용하여 체크섬을 만들고, 이 체크섬으로 파일의 상태, 데이터를 관리하게 된다. 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.

 

Git 파일의 세가지 상태

Git의 파일들은 Committed, Modified, Staged 3가지 상태가 존재한다. 파일의 상태는 파일이 Git 프로젝트 내 어느 공간에 있는지에 따라 결정된다. 이 공간은 3가지로 구성되는데 각각 Git 디렉토리, 워킹 디렉토리(트리), Staging Area이다.

 

먼저 Git 디렉토리는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳이다. 이곳이 Git의 핵심이다. 다른 컴퓨터에 있는 저장소를 Clone할 때 Git 디렉토리가 만들어진다.

워킹 트리는 프로젝트의 특정 버전을 Checkout한 것이다. Git 디렉토리는 현재 작업 중인 디스크에 ㅇㅆ고, 그 안에 압축된 데이터베이스에서 파일을 가져와 워킹 트리를 만든다.

Staging Area는 Git 디렉토리에 있다. 곧 커밋할 파일에 대한 정보를 저장한다.

 

Git의 작업은 아래 순서로 이루어진다.

1. 워킹 디렉토리에서 파일을 수정한다. (이때 파일은 Modified 상태이다.)

2. 수정 파일을 Staging하면 Staging Area로 이동하고, 커밋할 스냅샷을 만든다. (이때 파일은 Staging 상태이다.)

3. Commit하면 Git 디렉토리에 영구적인 스냅샷을 저장한다. (이때 파일은 Committed 상태이다.)

Comments