[Git] Git의 전반적인 구조는???

Youngwoo Lee·2020년 12월 3일
0

git

목록 보기
1/9
post-thumbnail

git을 사용하는 이유??

git은 "버전 관리" 시스템으로, 개발자, 그래픽 디자이너, 웹 디자이너 모두가 사용하는 VCS(Version Control System)이다. 많은 VCS에서도 git은 모든 직군에서 사랑 받고 있는데 이러한데는 많은 이유가 있다.

깃의 특징과 장점

1. 분산 버전 관리 시스템(DVCS)

로컬 버전 관리 시스템과 중앙집중식 버전 관리(CVCS) 시스템은 로컬이나 중앙 서버에서 문제가 생겼을 경우 모든 작업을 할 수 없다는 크나큰 문제점을 가지고 있지만, 분산 버전 관리 시스템(DVCS)는 저장소의 히스토리를 전부 클라이언트에서도 복제해 놓아서 서버에 문제가 생겨도 작업을 이어나갈 수 있다.

2. 차이가 아닌 스냅샷

위 그림처럼 다른 VCS 시스템들은 다음과 같이 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다(델타 기반 버전관리 시스템이라고 부름)

그러나, Git은 이런식으로 데이터를 저장하지도 취급하지도 않는다. 대신 Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.

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

거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터가 필요 없다. 그래서 네트워크 속도에 영향을 받는 CVCS와는 비교가 안되게 빠르다. git은 프로젝트 히스토리를 조회할 때 서버 없이 조회한다. 그냥 로컬 데이터베이스에서 히스토리를 읽어서 보여주기 때문에 네트워크에 연결이 되지 않아도 commit 할 수 있으며 매우 빠르다.

4. Git의 무결성

데이터를 저장하기 전에 항상 체크섬을 만들고, 이 체크섬을 통해서 데이터를 관리한다. Git은 SHA-1 해시를 사용하여 체크섬을 만든다. 만든 체크섬은 40자 길이의 16진수 문자열이다. 파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구한다.

Git은 모든 것을 해시로 식별하기 때문에 이런 값은 여기저기서 보인다. 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.

5. 세 가지 상태!!!

이 부분이 이 글에서 제일 중요하다. Git은 파일을 Committed, Modified, Staged 이렇게 세 가지 상태로 관리한다.

  • Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
  • Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
  • Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태이다.

그러니깐 쉽게 그림으로 보자면 Git은 세가지 단계가 크게 있다고 보면 된다.

Git 디렉토리, working Directory, Staging Area

1) git directory(Repository)
Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 Git 디렉토리가 Git의 핵심이다. 다른 컴퓨터에 있는 저장소를 clone할 때 Git 디렉토리가 만들어진다.

2) Working Tree(Working Directory)
프로젝트의 특정 버전을 Checkout 한 것이다. Git 디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.

3) Staging Area
Git 디렉토리에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. Git에서는 기술용어로는 "Index"라고 하지만, "Staging Area"라는 용어를 써도 상관 없다

ref) git을 보면 더 자세히 알 수 있다.

profile
iOS Developer Student

0개의 댓글