Git 개념과 설치

분산형 버전 관리 시스템의 이해와 환경 설정

Git의 핵심 개념(중앙형 vs 분산형), Git과 GitHub의 차이, OS별 설치 방법, 초기 사용자 설정, GitHub 인증(PAT/SSH) 설정을 다룬다.

Engineering
Git
DevOps
저자

Kwangmin Kim

공개

2023년 05월 01일

1 Git 개념

1.1 Git이란?

Git은 코드의 변경 이력을 관리하는 분산형 버전 관리 시스템(Distributed Version Control System, DVCS)이다.

1.2 버전 관리 시스템의 두 가지 아키텍처

1.2.1 중앙형 (예: SVN)

중앙 저장소 (Server)
       ↑↓
  유저 A, 유저 B, 유저 C

특징:

  • 모든 변경사항이 중앙 저장소에 저장됨
  • 인터넷 연결 필수 (커밋할 때마다)
  • 충돌 시 서로 겹치면 중앙에서 에러 발생
  • 백업이 중앙 저장소 하나에만 존재

문제점:

  • 중앙 저장소 장애 → 전체 팀 작업 중단
  • 커밋하려면 반드시 인터넷 필요

1.2.2 분산형 (예: Git)

        중앙 저장소 (GitHub/GitLab)
              ↑↓
  유저 A의      유저 B의      유저 C의
  로컬 저장소   로컬 저장소   로컬 저장소

특징:

  • 각 개발자가 전체 저장소의 복사본을 가짐 (로컬)
  • 로컬에서 커밋 (인터넷 불필요)
  • 나중에 중앙 저장소에 푸시 (인터넷 필요)
  • 충돌은 로컬에서 발생 → 중앙 저장소는 항상 안전

장점:

  • 중앙 서버 장애 → 로컬 작업 계속 가능
  • 오프라인 작업 가능
  • 각자 독립적으로 작업 후 병합

1.3 Git vs GitHub

구분 Git GitHub
정의 버전 관리 시스템 (소프트웨어) Git을 기반한 웹 서비스
실행 로컬 컴퓨터에서 실행 온라인 저장소 호스팅
역할 코드 변경 추적 및 기록 코드 공유, 협업, CI/CD
비용 무료 (오픈소스) 무료 + 유료 플랜

간단한 비유:

  • Git = “책 쓰는 방법” (도구)
  • GitHub = “책 출판사” (플랫폼)

1.4 Git의 3가지 영역

Git은 파일을 3가지 영역에서 관리한다. 이 개념을 이해하면 Git의 모든 명령어가 자연스럽게 이해된다.

Working Directory       Staging Area (Index)       Repository (.git)
 (작업 디렉토리)            (스테이징 영역)              (로컬 저장소)

  파일 수정            git add →              git commit →
                     커밋할 파일 선택           변경 이력 확정
영역 설명 비유
Working Directory 실제 파일을 수정하는 공간 작업대
Staging Area 다음 커밋에 포함될 파일을 모아두는 공간 택배 포장대
Repository 커밋된 이력이 저장되는 공간 (.git 폴더) 택배 발송 완료

2 OS별 Git 설치

2.1 Windows

Git 다운로드에서 최신 버전을 설치한다.

설치 시 주의:

  • “Add a Git Bash Profile to Windows Terminal” 옵션 선택 (PowerShell에서 Git 사용 가능)

설치 확인:

git --version
# 출력 예시:
# git version 2.47.0.windows.2

버전 번호가 출력되면 설치 성공이다. 'git'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라고 나오면 설치가 되지 않은 것이다. 재설치 후 터미널(PowerShell)을 완전히 닫았다가 다시 열어야 PATH가 적용된다.

2.2 macOS

# Homebrew 사용
brew install git

# 설치 확인
git --version
# 출력 예시:
# git version 2.47.0

macOS에는 기본 Git이 설치되어 있지만 버전이 낮다. Homebrew로 설치하면 최신 버전을 사용할 수 있다.

2.3 Linux (Ubuntu/Debian)

apt update                    # 패키지 목록 업데이트
apt install git -y            # Git 설치

git --version                 # 설치 확인
# 출력 예시:
# git version 2.43.0

3 Git 초기 설정

3.1 사용자 정보 설정

첫 커밋 전에 반드시 설정해야 한다. 이 정보가 커밋 이력에 기록된다.

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

git config --list  # 설정 확인
# 출력 예시:
# credential.helper=manager
# user.name=Kwangmin Kim
# user.email=kwangmin@example.com
# core.autocrlf=true        ← Windows에서 줄바꿈 자동 변환
# core.editor=vim
# init.defaultbranch=main

user.nameuser.email이 목록에 있으면 설정 완료이다. git config --list 출력이 길게 나와도 당황하지 말고, 그 중에서 user.nameuser.email 두 줄만 확인하면 된다.

3.2 저장소 생성

3.2.1 방법 1: GitHub에서 먼저 만들고 Clone (권장)

  1. GitHub에 로그인
  2. “+” 버튼 → “New repository”
  3. 저장소 이름 입력, README 추가 체크 → “Create repository”
  4. 로컬로 복제:
git clone https://github.com/username/my_project.git
# 출력 예시:
# Cloning into 'my_project'...
# remote: Enumerating objects: 3, done.
# remote: Counting objects: 100% (3/3), done.
# remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
# Receiving objects: 100% (3/3), done.

cd my_project

마지막 줄 Receiving objects: 100% (3/3), done. 이 보이면 성공이다. 현재 디렉토리에 my_project 폴더가 생긴다.

3.2.2 방법 2: 로컬에서 먼저 만들고 GitHub에 연결

# 작업 폴더 생성 및 Git 초기화
mkdir my_project
cd my_project
git init  # .git 폴더 생성
# 출력 예시:
# Initialized empty Git repository in /home/user/my_project/.git/

# GitHub에서 빈 저장소 생성 후 연결
git remote add origin https://github.com/username/my_project.git
git push -u origin main

Initialized empty Git repository in .../.git/ 가 출력되면 현재 폴더가 Git 저장소로 초기화된 것이다. 이후 git remote add origin 명령으로 GitHub의 원격 저장소와 연결한다.

힌트

방법 1(Clone)이 더 간단하고 실수가 적다. 방법 2는 이미 로컬에 프로젝트가 있을 때 사용한다. 방법 2에서 발생할 수 있는 문제는 7편: Git Remote에서 다룬다.

4 GitHub 인증 설정

GitHub는 보안상 비밀번호 인증을 2021년에 제거했다. 다음 2가지 방법 중 하나를 사용한다.

4.1 방법 1: Personal Access Token (PAT)

4.1.1 토큰 생성

  1. GitHub 로그인
  2. 우측 상단 프로필 → Settings
  3. 왼쪽 메뉴 → Developer settingsPersonal access tokensTokens (classic)
  4. Generate new token (classic) 클릭
  5. 설정:
    • Note: “Local development” (또는 원하는 이름)
    • Expiration: 원하는 기간 (90 days 등)
    • Select scopes: repo 체크박스 선택
  6. Generate token 클릭
  7. 토큰을 복사하여 안전한 곳에 저장 (다시 볼 수 없음!)

4.1.2 토큰으로 인증

git push
# Username 입력: your_github_username
# Password 입력: (위에서 생성한 token 붙여넣기)

4.2 방법 2: SSH Key

4.2.1 SSH Key 생성

ssh-keygen -t ed25519 -C "you@example.com"
# 출력 예시 (대화형):
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/home/user/.ssh/id_ed25519): [Enter]
# Enter passphrase (empty for no passphrase): [Enter]
# Enter same passphrase again: [Enter]
# Your identification has been saved in /home/user/.ssh/id_ed25519
# Your public key has been saved in /home/user/.ssh/id_ed25519.pub
# The key fingerprint is:
# SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcdef you@example.com
# The key's randomart image is:
# +--[ED25519 256]--+
# |     .o+.        |
# |     ..+.        |
# +----[SHA256]-----+

프롬프트에서 Enter 2~3번 (파일 경로와 패스프레이즈)을 입력하면 키 쌍이 생성된다. 생성된 파일은 두 개이다: - ~/.ssh/id_ed25519비밀키 (절대 공유하지 않는다) - ~/.ssh/id_ed25519.pub공개키 (GitHub에 등록하는 키)

4.2.2 공개키를 GitHub에 등록

  1. 공개키 복사:
# Windows (PowerShell)
cat ~/.ssh/id_ed25519.pub | clip

# macOS
cat ~/.ssh/id_ed25519.pub | pbcopy

# Linux
cat ~/.ssh/id_ed25519.pub
  1. GitHub 설정:
    • 우측 상단 프로필 → Settings
    • SSH and GPG keysNew SSH key
    • Title 입력, Key에 공개키 붙여넣기 → Add SSH key

4.2.3 SSH로 원격 저장소 연결

# SSH 연결 테스트 (등록 후 먼저 확인)
ssh -T git@github.com
# 성공 출력:
# Hi username! You've successfully authenticated,
# but GitHub does not provide shell access.

# 원격 저장소를 SSH 주소로 변경
git remote set-url origin git@github.com:username/my_project.git

# 푸시
git push

Hi username! You've successfully authenticated 가 출력되면 SSH 설정이 완료된 것이다. “but GitHub does not provide shell access.” 는 에러가 아니다 — GitHub는 SSH 접속으로 명령어 실행(shell)을 허용하지 않는다는 안내 문구이며, Git push/pull은 정상 동작한다.

5 자주 발생하는 에러

5.1 Author identity unknown

fatal: empty ident name not allowed

원인: 사용자 정보 미설정

해결:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

5.2 Push 거부 에러

error: failed to push some refs to 'origin'
hint: Updates were rejected because the tip of your current branch is behind

원인: 원격 저장소에 로컬에 없는 새로운 커밋이 있음

해결:

git pull   # 원격의 최신 변경사항 먼저 가져오기
git push   # 다시 푸시

5.3 SSH 첫 연결 시 호스트 확인 경고

SSH로 처음 GitHub에 연결하면 다음과 같은 경고가 나타난다:

The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

해석: “이 서버(github.com)가 진짜 GitHub인지 처음 만나서 확인할 수 없다. 계속 접속하겠는가?”

해결: yes 입력 → Enter. 이후 동일 서버에는 다시 묻지 않는다.

# yes 입력 후 출력:
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.

GitHub의 공식 SSH 키 지문(fingerprint)은 SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU 이다. 표시된 지문이 이와 다르면 중간자 공격(MITM) 가능성이 있으니 연결하지 않는다.

5.4 SSH Permission denied

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

원인 3가지:

  1. SSH 공개키를 GitHub에 등록하지 않았다
  2. 비밀키(~/.ssh/id_ed25519)가 없거나 경로가 다르다
  3. SSH Agent에 키가 로드되지 않았다

해결:

# SSH Agent에 키 추가 (매 세션마다 필요할 수 있음)
ssh-add ~/.ssh/id_ed25519

# 키 목록 확인
ssh-add -l
# 출력 예시:
# 256 SHA256:AbCdEfGh... you@example.com (ED25519)

# 다시 연결 테스트
ssh -T git@github.com

5.5 관련 포스트

Subscribe

Enjoy this blog? Get notified of new posts by email: