📌 버전 관리 (Version Control)
: 소프트웨어 등을 개발할 때 어떤 내용을 어느 시점에 누가 변경했는지에 대한 `변경점`을 관리하는 것을 의미
- 프로젝트의 변경 사항을 추적
- 이전 버전으로의 복원이나 협업을 용이하게 함
- 소프트웨어 개발 생명 주기를 관리하는 데 도움을 줌
🔺 VCS (Version Control System)
: 버전 관리를 효과적으로 수행할 수 있는 도구
🔺 버전 관리 시스템의 종류
1. 로컬 버전 관리 시스템(Local Version Control System)
: 서버 없이 로컬 컴퓨터 내에서 데이터 베이스를 사용하여 파일의 버전을 관리.
2. 중앙 집중식 버전 관리 시스템
: 서버에서 최종 버전을 관리하는 방식으로 로컬에서 서버의 파일을 다운받아 수정한 후 수정 내용을 서버에 반영하여 관리.
중앙 서버가 문제가 생기면 버전 관리가 어렵다는 문제가 있음.
3. 분산식 버전 관리 시스템(Distributed Version Control System)
: 서버가 있는 것은 중앙 집중식과 동일하지만, 로컬에서도 이를 관리하기 때문에 중앙 서버에 문제가 생긴다고 해서 로컬
의 내용을 바탕으로 안전하게 버전 관리가 가능
📌 Git 기초
Git은 스냅샷 모델을 사용한다.
수정 내용이 없을 경우 이전 상태의 파일에 대한 링크만 저장한다.
✨ 스냅샷 모델
: 파일이나 폴더의 변경 사항을 기록하는 방식
각각의 변경 사항은 스냅샷으로 캡처되어 저장되며, 이전 스냅샷과의 차이점이 기록된다.
✨ 델타 모델
: 파일의 변경사항이 생기면 이전 버전과 비교하여 변경된 부분을 저장하는 방식
📌 Git의 영역
0. branch
: 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있는 기능
- 하나의 프로젝트에서 여러 사람이 동시에 본인의 작업을 진행할 수 있다.
- 보통 main 브랜치 위에서 작업하며, 브랜치 위에 새로운 브랜치를 생성해 독립된 작업 공간을 만들 수 있다.
- 하나의 브랜치는 독립된 워크스페이스, 인덱스, 로컬 레포지토리, 리모트 레포지토리 공간을 가진다.
1. Working Directory (작업 디렉토리)
: 실제로 파일들이 존재하고 작업이 이루어지는 곳
2. Staging Area (인덱스)
: 변경된 파일들 중 Git이 추적하길 원하는 파일들을 일시적으로 저장하는 영역
3. Repository (저장소)
: 프로젝트의 모든 버전 기록이 담기는 곳으로, 실제로 Git이 관리하는 데이터가 저장되는 곳
4. Remote (원격 저장소)
: 인터넷이나 네트워크 어딘가에 있는 서버 저장소
- 데이터를 Push 하고 Pull 하는 곳
✨ Git의 기본 작업 흐름
1. 파일을 수정하고 Working Directory에서 변경을 진행
2. 변경한 파일 중 Git이 추적하길 원하는 파일을 Staging Area에 추가
3. Staging Area에 추가된 파일들을 커밋하여 Repository에 저장
4. Repository에 저장된 파일들을 push하여 Remote에 업로드
🔺 Git 특징
1. 로컬에서 관리 및 실행
거의 모든 명령이 로컬 파일과 데이터만 사용하기 때문에 네트워크에 연결이 없는 상태에서도 버전 관리가 가능하다.
2. 무결성
Git의 무결성은 Git이 데이터를 저장할 때 데이터의 무결성을 유지한다는 것을 의미한다.
즉, 데이터가 변경되지 않고 유지되는 것을 보장한다.
3. Git 객체
Git의 객체는 Blob, Tree, Commit, Tag의 총 4가지가 있으며, 이는 Git의 실제 데이터를 의미한다.
Git 객체는 .git 디렉토리에서 관리되며 각 객체는 SHA-1 해시를 사용해 만들어진 체크섬으로 이루어져 있다.
✨ .git 디렉토리
: Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
다른 Git 저장소를 Clone할 때 내부에 .git 디렉토리가 함께 복사된다.
(.은 숨겨진 파일이라는 뜻)
참고