들어가기 전
부스트 캠프 마지막 프로젝트를 진행하는 도중 마스터 클래스에 백엔드 멘토님이신 호눅스님의 갑작스러운 깃 강의가 있었다.
챌린지 때 분명이 학습한 내용인데 여러가지 질문에 재대로 답변한 것 없다
이번 기회에 블로그 포스팅과 함께 다시 공부하자.
Git이 다른 이유
깃은 VCS(version control system)이다.
VCS는 많지만 나는 Git밖에 모른다... 같이 개발한 분들중에도 다른 VCS를 써본 거를 들어본적이없다.
그만큼 가장 대중적인 VCS인 것 같다.. 그러면 다른 VCS와 뭐가 다를까??
다른 VCS (첫번째 그림)
왼쪽 그림 먼저 분석해보자.
VCS는 파일의 변화를 시간순으로 관리하며 파일들의 집합을 관리한다.
깃 VCS (두번째 그림)
하지만 Git은 이런식으로 데이터를 저장하지도 취급하지도 않는다.
Git은 데이터를 파일 시스템 스냅샷의 연속으로 취급하고 크기가 아주 작다.
파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다.
단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.
특징
1. 대부분 로컬에서 실행된다.
거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터는 필요 없다.
Git은 프로젝트의 히스토리를 조회할 때 서버 없이 조회한다. 그냥 로컬 데이터베이스에서
히스토리를 읽어서 보여 준다. 그래서 눈 깜짝할 사이에 히스토리를 조회할 수 있다.
2. 무결성
Git은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
Git은 SHA-1 해시를 사용하여 체크섬을 만든다.
만든 체크섬은 40자 길이의 16진수 문자열이다.
파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구한다. SHA-1은 아래처럼 생겼다.
여기서 2글자는 디렉토리 38글자는 오브젝트 파일 이름이된다.
체크섬 = 70460b4b4aece5915caf5c68d12f560a9fe3e4
70 = 디렉토리
460b4b4aece5915caf5c68d12f560a9fe3e4 = 오브젝트 파일
3. Git은 단지 데이터를 추가할 뿐
Git으로 무얼 하든 Git 데이터베이스에 데이터가 추가된다.
되돌리거나 데이터를 삭제할 방법이 없다. 다른 VCS처럼 Git도 커밋하지 않으면 변경사항을 잃어버릴 수 있다.
하지만, 일단 스냅샷을 커밋하고 나면 데이터를 잃어버리기 어렵다.
상태
깃은 로컬에서 여러가지 상태로 구분된다.
각 상태별 특징을 알아보자.
상태 | 설명 |
Untracked | 해당 파일을 Git이 추적하지 않은 상태 |
Tracked | 해당 파일을 Git이 추적하는 상태 |
UnModifed | Tracked 상태이며 아직 마지막 커밋 이후 수정 x |
Modified | Tracked 상태이며 아직 마지막 커밋 이후 수정 o |
Staged | 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태 |
로컬 구조
나중에 명령어쪽에서 다시 한번 보겠지만 여기서 간단하게 정리하고 가자.
1. 워킹 디렉토리
- 현재 작업하는 작업 공간으로 많은 수정이 일어나는 공간
2. StagingArea
- 커밋 전 modified된 파일들을 올려놓는 공간
3. Stash
- stash는 Modified이면서 Tracked 상태인 파일과 Staging Area에 있는 파일들을 보관해두는 장소
- 워킹 디렉토리에서 수정한 파일들만 저장, 저장한 이후에는 워킹 디렉토리가 깨끗해진다.
- 아직 작업이 끝나지 않은 상태에서 다른 브랜치로 이동할 때 커밋을 하지 않고 나중에 다시 돌아와서 작업을 할 수 있도록 도와줌
4. 로컬 레포지토리
- remote로 올라가기 전 commit이 모이는 공간
다음 학습
다음은 깃의 디렉토리 구조와 다양한 객체들을 알아보자.
'깃 > 이론' 카테고리의 다른 글
깃 디렉토리 및 객체 (3) | 2024.11.07 |
---|