DaleSchool

Git과 버전 관리

입문20분

학습 목표

  • 버전 관리 시스템이 필요한 이유를 설명할 수 있다
  • Git을 설치하고 초기 설정을 완료할 수 있다
  • git init으로 새 저장소를 만들 수 있다
  • git status 출력의 의미를 이해할 수 있다

동작하는 코드

예제 1: Git 설치 확인과 설정

Git이 설치되어 있는지 확인:

git --version

출력 예시:

git version 2.43.0

버전이 2.x 이상이면 됩니다. 없다면 설치:

# macOS
brew install git

# 확인
git --version

초기 설정 (처음 한 번만, 모든 프로젝트에 적용):

git config --global user.name "홍길동"
git config --global user.email "hong@example.com"

예제 2: 첫 저장소 만들기

mkdir my-project
cd my-project
git init

출력:

Initialized empty Git repository in /Users/dale/my-project/.git/

예제 3: git status로 상태 파악

git status

출력:

On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

파일을 만들고 다시 확인:

echo "# 나의 첫 프로젝트" > README.md
git status

출력:

On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	README.md

nothing added to commit but untracked files present

Untracked files는 Git이 아직 추적하지 않는 파일입니다. 빨간색으로 표시됩니다.

Git 터미널

git --version으로 시작해보세요. git init으로 저장소를 초기화해보세요.

user@daleschool:~/myproject$

직접 수정하기

git status 색상 의미

git status

출력 색상:

  • 빨간색: 추적 안 됨(Untracked) 또는 수정됐지만 스테이징 안 됨
  • 초록색: 스테이징된 파일 (커밋 대기 중)
# 파일 추가
echo "첫 번째 파일" > file1.txt
echo "두 번째 파일" > file2.txt
git status

출력:

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	README.md
	file1.txt
	file2.txt
# 하나를 스테이징
git add README.md
git status

출력:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   README.md    ← 초록색

Untracked files:
	file1.txt                ← 빨간색
	file2.txt

HEAD란?

HEAD현재 내가 작업 중인 위치를 가리키는 포인터입니다.

커밋 A → 커밋 B → 커밋 C
                       ↑
                      HEAD (현재 위치)

지금은 커밋이 없으므로 HEAD가 가리킬 곳이 없습니다. 첫 커밋 후부터 사용됩니다.

Git 터미널

git init으로 저장소를 초기화하고, 파일을 만든 뒤 git status로 상태를 확인해보세요.

user@daleschool:~/myproject$

"왜?" — 버전 관리가 없다면?

버전 관리 없이 개발하면 이런 일이 생깁니다:

  • project_final.zip, project_final_v2.zip, project_final_진짜최종.zip
  • "어제까지 잘 됐는데 오늘 갑자기 안 됨" → 무엇을 바꿨는지 모름
  • 팀원이 같은 파일을 수정해서 충돌 → 누군가의 작업이 사라짐

Git은 이 모든 문제를 해결합니다:

문제Git 해결책
파일 여러 버전 관리커밋으로 스냅샷 저장
무엇이 바뀌었나?git diff로 변경 내역 확인
이전 버전으로 되돌리기커밋 히스토리에서 복원
팀 협업 충돌브랜치와 머지로 충돌 관리

Git의 세 가지 영역

작업 디렉토리 → (git add) → 스테이징 영역 → (git commit) → 저장소
(Working Dir)              (Staging Area)              (Repository)
  • 작업 디렉토리: 실제 파일이 있는 곳
  • 스테이징 영역: 다음 커밋에 포함할 변경사항을 모아두는 곳
  • 저장소(Repository): 커밋 히스토리가 저장된 곳 (.git 디렉토리)

흔한 실수

실수 1: git config 설정 잊기

git commit   # 설정 없이 시도
# Author identity unknown
# Please tell me who you are.

반드시 이름과 이메일을 먼저 설정하세요:

git config --global user.name "이름"
git config --global user.email "이메일"

실수 2: 프로젝트 안에서 git init을 중복으로 실행

cd ~/projects/myapp
git init

# 실수로 하위 디렉토리에서 또 실행
cd src
git init   # 저장소 안에 저장소가 생성됨 (중첩 저장소)

git init은 프로젝트 최상위 디렉토리에서 한 번만 실행하세요.

실수 3: .git 디렉토리 삭제

# 절대 하지 마세요!
rm -rf .git   # 모든 Git 히스토리가 사라짐

.git 디렉토리는 Git의 데이터베이스입니다. 삭제하면 복구가 불가능합니다.

심화 학습

git config 설정 확인 및 관리

설정한 내용은 ~/.gitconfig에 저장됩니다:

git config --list

출력:

user.name=홍길동
user.email=hong@example.com
core.editor=vim

항목별 확인:

git config user.name
# 홍길동

# 전역 설정 파일 직접 보기
cat ~/.gitconfig

프로젝트마다 다른 설정 (로컬 설정):

# 특정 프로젝트에서만 다른 이메일 사용
git config user.email "work@company.com"  # --global 없으면 프로젝트 전용
.git 디렉토리 내부 구조

git init.git 숨김 디렉토리를 만듭니다:

ls .git/

출력:

HEAD        config      description hooks/      info/       objects/    refs/

주요 파일:

  • HEAD: 현재 브랜치를 가리키는 포인터
  • config: 이 저장소의 설정
  • objects/: 실제 커밋, 파일, 트리 데이터 (SHA-1 해시로 저장)
  • refs/: 브랜치, 태그 포인터

이 구조를 이해하면 Git이 "어떻게" 동작하는지 알 수 있습니다.

기본 브랜치 이름 설정 (main vs master)

최근 Git은 기본 브랜치를 main으로 바꾸는 추세입니다:

# 새 저장소의 기본 브랜치를 main으로 설정
git config --global init.defaultBranch main

이미 master로 만들어진 저장소:

# master를 main으로 이름 변경
git branch -m master main
  1. 터미널에서 git --version으로 Git이 설치되어 있는지 확인하세요.
  2. git config --global user.name "이름"git config --global user.email "이메일"로 설정하세요.
  3. 새 디렉토리를 만들고 git init으로 저장소를 초기화하세요.
  4. README.md를 만든 후 git status로 상태를 확인하세요. 빨간색과 초록색 항목이 각각 무엇을 의미하는지 생각해보세요.
  5. git config --list로 현재 설정을 모두 확인하세요.
Git 터미널

git init으로 저장소를 만들고, 파일을 추가하고, git status로 변화를 관찰해보세요.

user@daleschool:~/myproject$

git status에서 빨간색 파일과 초록색 파일의 차이는?