Git의 기본 구조 이해하기

Git이란 무엇인가

Git은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 협업할 수 있도록 돕는 분산 버전 관리 시스템이다.

주로 소스 코드 관리에 사용되며, 모든 노드는 네트워크나 중앙 서버와 독립적으로 동작한다.

분산 버전 관리 시스템의 필요성

분산 버전 관리 시스템(DVCS)의 필요성은 파일의 변경 이력을 효과적으로 관리하는 데 있다.

  1. 파일을 시간순으로 추적함으로써 실수나 오류 발생 시 이전 버전으로 쉽게 복구할 수 있다.
  2. 작업 간의 차이점을 비교하여 문제를 빠르게 해결할 수 있다.
  3. 여러 명이 협업할 경우, 누가 어떤 변경을 했는지 파악할 수 있어 생산성 향상에 기여한다.
  4. 중앙 서버에 의존하지 않기 때문에 네트워크 문제가 발생해도 각자의 작업을 독립적으로 진행할 수 있어 안정성 또한 보장된다.

Git의 장점

Git은 빠르고 효율적인 분산 버전 관리 시스템으로, 다양한 장점을 제공한다.

  1. 분산 저장소: Git은 모든 사용자가 로컬 저장소에 전체 이력을 보유하므로 네트워크나 중앙 서버에 문제가 발생하더라도 독립적으로 작업이 가능하다.
  2. 효율적인 협업: 여러 개발자가 동시에 작업할 수 있으며, 누가 어떤 부분을 변경했는지 쉽게 추적할 수 있어 협업의 효율성을 높여준다.
  3. 강력한 복구 기능: 파일 변경 이력을 시간순으로 관리하여, 실수나 오류 발생 시 언제든지 이전 상태로 복구할 수 있다.
  4. 비선형 워크플로 지원: 브랜치를 활용해 다양한 기능을 독립적으로 개발할 수 있으며, 병합을 통해 작업을 통합할 수 있어 유연한 워크플로를 제공한다.
  5. 속도와 성능: Git은 빠른 속도와 효율성을 강조해 설계되었으며, 대규모 프로젝트에서도 높은 성능을 유지할 수 있다.

Git의 주요 구성 요소

Working Directory

Working Directory는 우리가 직접 파일을 보고, 수정하고, 새로운 파일을 추가하는 작업 공간을 말한다. 쉽게 말해, 코드나 문서를 작성하는 곳이 Working Directory라고 할 수 있다.

Git은 이 Working Directory에서 어떤 파일이 변경되었는지 감지하고, 그다음에 우리가 선택적으로 변경 사항을 기록할 수 있게 해준다.

Staging Area

Staging Area는 변경된 파일들을 커밋하기 전에 임시로 저장해 두는 공간을 말한다.

우리가 Working Directory에서 파일을 수정한 후, 바로 Git에 기록하는 것이 아니라, 먼저 git add 명령어를 사용해 파일들을 Staging Area에 준비시킨다. 이 과정을 통해 어떤 파일들이 다음 커밋에 포함될지 선택적으로 관리할 수 있다.

Repository (Local & Remote)

Repository(저장소)는 Git이 파일의 변경 이력을 영구적으로 저장하는 공간을 말한다.

  • 로컬 저장소(Local Repository)
    • 로컬 저장소는 내 컴퓨터에 있는 저장소로, Staging Area에서 준비된 파일을 git commit 명령어로 기록해 저장해 두는 공간이다.
    • 모든 변경 이력이 여기에 저장되고, 네트워크 연결 없이도 작업할 수 있다.
  • 원격 저장소(Remote Repository)
    • 원격 저장소는 다른 사용자와 협업하기 위해 사용하는 저장소이다.
    • 클라우드나 서버에 위치해 있다. 우리가 만든 변경 사항을 git push 명령어를 사용해 원격 저장소에 업로드할 수 있다.

Git의 핵심 파일 및 개념

.git 디렉토리:

.git 디렉토리는 Git 프로젝트의 핵심 파일이 저장되는 곳이다.

Git의 설정, 커밋 기록, 브랜치 정보 등이 여기에 저장된다. 이 디렉토리는 Git 프로젝트가 동작하는 데 필수적인 역할을 한다.

HEAD:

HEAD는 현재 작업 중인 브랜치나 커밋을 가리키는 포인터이다.

Git은 HEAD를 통해 현재 작업 위치를 추적한다. 브랜치를 변경하거나 특정 커밋으로 돌아갈 때 HEAD가 이동한다.

Commit:

커밋은 파일의 스냅샷을 저장하는 단위이다.

커밋은 특정 시점의 변경 사항을 기록하며, 해시 값을 통해 변경 이력을 관리한다. 이전 버전으로 되돌리거나 변경 내용을 비교할 수 있는 기준점이 된다.

Git의 흐름

add

git add는 수정하거나 새로 추가한 파일을 Staging Area로 올린다. 이 단계에서는 커밋될 파일을 선택하는 과정이다.

git add 파일명

commit

git commit 명령어로 Staging Area에 있는 파일들을 커밋으로 기록한다. 이때, 커밋 메시지를 통해 변경 사항에 대한 설명을 남길 수 있다.

git commit -m "커밋 메시지"

push

git push 명령어로 로컬에서 생성한 커밋을 원격 저장소로 전송한다. 이 과정을 통해 다른 사람들과 변경 사항을 공유할 수 있다.

git push origin 브랜치명

마무리

개발자 또는 개발자가 되려는 사람이라면 Git을 사용해보지 않은 사람은 거의 없을 것 이다.

나 또한 명령어를 익히고 사용하는 데 큰 어려움은 없었다.

그러나 팀 프로젝트에서 협업할 때, 명령을 실행한 후 작업 공간에서 발생하는 변화를 이해하지 못하는 경우가 많았다.

이 문제를 해결하려면 Git의 기본 구조와 분산 버전 관리 시스템에 대한 개념을 이해하는 것이 중요하다는 것을 깨달았다.

위로 스크롤