Git이라는 건
항상 제멋대로 명령어를 써오기만 했지...
이론적인 내용은 잘 모르는 영역이라,
공부하는 내용을 정리해보려고 한다...
코드 버전 관리 프로그램
소프트웨어를 개발할 때, 처음부터 완벽하게 만들기보다는
수정과 추가를 반복하면서 발전시켜 나갑니다.
이 과정에서 다음과 같은 상황이 자주 발생합니다:
버전 관리는 이런 상황에 대비하여
파일의 변경 이력을 기록하고,
원하는 시점의 상태로 복원할 수 있도록 도와줍니다.
버전 관리 도구이며
협업을 위한 기능을 제공하는 툴
버전 관리 시스템인 Git을 활용해 코드를 저장하고 협업할 수 있는 서비스
Git을 기반으로 소스 코드 변경 이력을 체계적으로 관리할 수 있습니다.
여러 명이 동시에 같은 프로젝트를 수정하고 합칠 수 있어 협업에 탁월합니다.
다른 컴퓨터나 사람에게 작업물을 전송할 수 있으며,
로컬에 문제가 생겨도 GitHub에 백업된 코드를 다시 내려받을 수 있습니다.
GitHub은 외부에 존재하는 컴퓨터처럼 작동하여,
프로젝트를 안전하게 보관하고 언제든지 접근하게 해줍니다.
즉, 내 프로그램의 모든 버전을 GitHub이란 컴퓨터에 저장하기 때문에,
내 로컬 컴퓨터에서 문제가 생겨도 언제든지 GitHub에서 프로그램의 코드를 가져올 수 있습니다.
| 구분 | Git | GitHub |
|---|---|---|
| 역할 | 버전 관리 도구 | Git 저장소를 위한 클라우드 서비스 |
| 설치 | 로컬(내 컴퓨터)에 설치 | 웹사이트 기반 서비스 (https://github.com) |
| 기능 | 변경 이력 기록, 버전 되돌리기 등 | 협업, 백업, 공유, PR 등 다양한 부가 기능 |
| 예시 | git commit, git log | pull request, issues, actions 등 |
Git을 사용하는 사람들을 위한 원격 저장소 서비스이며
협업과 백업을 쉽게 만들어주는 플랫폼
Git이 프로젝트의 모든 변경 사항을 저장하는 공간
이 저장소는 .git이라는 숨김 디렉토리 형태로 프로젝트 폴더 안에 생성됩니다.
.git 디렉토리 = Git 레포지토리Git이 현재 스테이지에 올라온 파일들의 상태를 저장하는 동작이자 그 결과물
즉, 프로젝트의 변경된 내용만 저장하는 스냅샷입니다.
단,❗️전체 디렉토리를 사진처럼 저장하는 게 아니라,
변경된 파일들의 차이점만 저장하는 방식(Differential snapshot)입니다.
(가장 처음의 커밋만 전체 파일의 스냅샷)
커밋 메시지와 작성자는 직접 설정해줍니다.
Git은 내부적으로 크게 3가지 종류의 작업 영역을 통해 파일 변경을 추적하고 저장합니다.
로컬에서 작업하는 프로젝트 디렉토리입니다.
커밋할 파일을 임시로 모아두는 공간입니다.
git add한 파일들이 존재하는 영역입니다.git commit을 하게 되면 Staging Area에 있는 파일들만 반영됩니다.실제 커밋이 저장되는 Git의 내부 데이터베이스(
.git디렉토리)입니다.
+--------------------+ +--------------------+ +---------------------+
| Working Directory | --> | Staging Area | --> | Repository |
| (내가 수정 중인 공간) | | (git add로 담는 공간) | | (git commit으로 저장) |
+--------------------+ +--------------------+ +---------------------+
workging directory에서 작업하고 만약 git add 없이 git commit -a 또는 특정 Git 설정으로 바로 커밋한다면,
모든 변경 파일이 커밋됩니다.
(물론 git commit <파일명>처럼 특정 파일만 커밋도 가능은 합니다만,...)
하지만 현실에서는...
이럴 때 Staging Area가 매우 유용합니다.
✅ 원하는 파일만 선택적으로 커밋하기 위해
✅ 변경 내용을 분리해 깔끔한 커밋 히스토리를 만들기 위해
→ Staging Area는 필수적인 중간 단계입니다.