Git과 GitHub는 개발 과정에서 소스 코드의 변경 이력을 관리하고 다른 개발자와 협업하기 위해 사용하는 대표적인 도구다.
두 용어를 함께 사용하는 경우가 많지만 역할은 서로 다르다.
| 구분 | Git | GitHub |
|---|---|---|
| 종류 | 분산 버전 관리 시스템 | Git 저장소 호스팅 서비스 |
| 주요 역할 | 파일의 변경 이력 관리 | 원격 저장, 공유, 협업 |
| 설치 여부 | 컴퓨터에 설치해야 한다 | 웹사이트 가입 후 사용한다 |
| 인터넷 연결 | 대부분의 작업을 오프라인으로 수행할 수 있다 | 원격 저장소 사용 시 인터넷이 필요하다 |
Git은 소스 코드의 변경 이력을 체계적으로 관리하는 분산 버전 관리 시스템(Distributed Version Control System)이다.
Git을 사용하면 다음과 같은 작업을 수행할 수 있다.
Git은 대부분의 작업을 로컬 컴퓨터에서 수행한다. 따라서 인터넷에 연결되어 있지 않아도 커밋, 로그 확인, 브랜치 생성 등의 작업을 진행할 수 있다.
버전 관리(Version Control)는 소프트웨어나 문서의 변경 이력을 기록하고 관리하는 방법이다.
버전 관리를 사용하면 다음 정보를 확인할 수 있다.
문제가 발생했을 때 이전 버전으로 되돌리거나 두 버전의 차이를 비교할 수도 있다. 여러 사람이 동시에 작업하는 프로젝트에서는 각자의 변경 내용을 병합하고 충돌을 해결하는 데 활용한다.
대표적인 버전 관리 시스템에는 다음과 같은 도구가 있다.
현재는 Git이 가장 널리 사용된다.
Git은 각 개발자의 컴퓨터에 전체 변경 이력을 포함한 로컬 저장소를 만든다.
브랜치(Branch)는 기존 코드에 영향을 주지 않고 독립적인 작업을 진행할 수 있도록 분리한 작업 공간이다.
GitHub, GitLab 등의 서비스와 연결하면 여러 개발자가 하나의 프로젝트에서 협업할 수 있다.
Git은 누가 언제 어떤 내용을 변경했는지 기록한다.
문제가 발생하면 과거 커밋을 확인하거나 revert, restore 등의 명령으로 변경 내용을 되돌릴 수 있다.
Git은 무료로 사용할 수 있는 오픈소스 도구다.
다음과 같은 프로그램과 함께 사용할 수 있다.
Git은 Git 공식 홈페이지에서 내려받을 수 있다.
Downloads를 선택한다.Homebrew가 설치되어 있다면 다음 명령으로 Git을 설치할 수 있다.
brew install git
macOS에서는 다음 명령을 실행했을 때 개발자 도구 설치 안내가 나타날 수도 있다.
git --version
터미널 또는 명령 프롬프트에서 다음 명령을 실행한다.
git --version
설치된 Git의 버전이 출력되면 정상적으로 설치된 것이다.
Git은 파일의 상태를 크게 세 영역으로 나누어 관리한다.
Working Directory → Staging Area → Repository
작업 공간 준비 영역 저장소
현재 파일을 작성하거나 수정하는 실제 프로젝트 폴더다.
다음 커밋에 포함할 변경 사항을 임시로 선택해 두는 영역이다.
커밋으로 확정된 변경 이력이 저장되는 영역이다.
기본적인 작업 흐름은 다음과 같다.
파일 작성·수정
↓
git add
↓
git commit
↓
git push
현재 프로젝트 폴더를 Git 저장소로 만든다.
git init
명령을 실행하면 현재 폴더에 .git이라는 숨김 폴더가 생성된다. 이 폴더에는 Git의 변경 이력과 설정 정보가 저장된다.
이미 Git 저장소인 폴더나 저장소 내부의 하위 폴더에서 무분별하게
git init을 실행하지 않도록 주의한다.
변경된 파일, 스테이징된 파일과 추적되지 않는 파일을 확인한다.
git status
Git 작업 중에는 git status를 자주 실행하는 것이 좋다.
특정 파일만 추가한다.
git add index.html
현재 디렉터리의 모든 변경 사항을 추가한다.
git add .
git add .에는 파일의 생성, 수정, 삭제 내용이 함께 포함될 수 있으므로 커밋 전에 반드시 상태를 확인한다.
git status
Staging Area에 있는 변경 내용을 하나의 버전으로 저장한다.
git commit -m "index.html 작성"
여러 파일을 추가한 뒤 하나의 커밋으로 저장할 수도 있다.
git add .
git commit -m "프로젝트 기본 구조 작성"
좋은 커밋 메시지는 무엇을 변경했는지 짧고 명확하게 설명한다.
git commit -m "README에 실행 방법 추가"
git commit -m "로그인 오류 수정"
git commit -m "맛집 카드 반응형 스타일 적용"
처음 커밋할 때 사용자 정보가 설정되어 있지 않으면 오류가 발생할 수 있다.
전역 사용자 정보를 설정한다.
git config --global user.name "사용자 이름"
git config --global user.email "example@email.com"
설정 내용을 확인한다.
git config --global --list
--global 옵션을 사용하면 컴퓨터의 모든 Git 저장소에 같은 사용자 정보를 적용한다.
현재 저장소에만 다른 정보를 사용하려면 --global을 제외한다.
git config user.name "프로젝트 사용자 이름"
git config user.email "project@example.com"
커밋 이력을 확인한다.
git log
커밋 이력을 한 줄씩 간단하게 확인한다.
git log --oneline
브랜치 구조까지 함께 확인한다.
git log --oneline --graph --all
아직 스테이징하지 않은 변경 내용을 확인한다.
git diff
git add로 스테이징한 변경 내용을 확인한다.
git diff --staged
README.md는 프로젝트를 소개하는 설명서다. GitHub 저장소에 접속했을 때 가장 먼저 표시되는 문서이므로 프로젝트를 이해하는 데 필요한 핵심 정보를 작성한다.
README는 Read Me, 즉 “먼저 읽어 보세요”라는 의미다. .md는 Markdown 문법을 사용하는 파일 확장자다.
일반적으로 README에는 다음 내용을 작성한다.
간단한 README 예시는 다음과 같다.
# 프로젝트 이름
프로젝트에 대한 간단한 설명
## 주요 기능
- 기능 1
- 기능 2
## 실행 방법
```bash
python3 main.py
```
GitHub는 Git 저장소를 온라인에 저장하고 공유할 수 있는 코드 호스팅 및 협업 플랫폼이다.
GitHub에서는 다음 기능을 사용할 수 있다.
Git이 변경 이력을 관리하는 도구라면, GitHub는 Git 저장소를 인터넷에서 공유하고 협업할 수 있도록 제공하는 서비스다.
New repository 또는 Create repository를 선택한다.Public 또는 Private로 설정한다.로컬 프로젝트에 이미 README가 있다면 GitHub에서 README를 추가하지 않고 빈 저장소로 생성하는 편이 충돌을 줄이기 쉽다.
로컬 저장소에 GitHub 원격 저장소 주소를 등록한다.
git remote add origin https://github.com/사용자이름/저장소이름.git
예시는 다음과 같다.
git remote add origin https://github.com/Songjeongkeun/mysite.git
origin은 원격 저장소에 붙이는 기본 별칭이다. 반드시 origin을 사용해야 하는 것은 아니지만 일반적으로 사용되는 이름이다.
git remote -v
등록된 원격 저장소의 가져오기(Fetch) 주소와 보내기(Push) 주소를 확인할 수 있다.
주소가 잘못되었거나 저장소 주소가 변경되었다면 다음 명령을 사용한다.
git remote set-url origin 새로운_저장소_URL
git remote remove origin
이 명령은 로컬 파일이나 GitHub 저장소를 삭제하지 않는다. 로컬 저장소에 등록된 원격 저장소 연결 정보만 삭제한다.
현재 브랜치 이름을 확인한다.
git branch
기본 브랜치 이름을 main으로 변경하려면 다음 명령을 사용한다.
git branch -M main
로컬 커밋을 GitHub 원격 저장소로 전송한다.
git push -u origin main
-u는 현재 로컬 브랜치와 원격 브랜치의 추적 관계를 설정하는 옵션이다.
한 번 추적 관계를 설정하면 이후에는 다음과 같이 간단하게 사용할 수 있다.
git push
git pull
과거에는 기본 브랜치 이름으로
master를 많이 사용했지만 최근 GitHub 저장소는 일반적으로main을 사용한다. 실제 브랜치 이름은git branch로 확인한다.
새 프로젝트를 GitHub에 처음 올리는 기본 과정은 다음과 같다.
git init
git add .
git commit -m "프로젝트 첫 커밋"
git branch -M main
git remote add origin https://github.com/사용자이름/저장소이름.git
git push -u origin main
이미 Git 저장소가 생성되어 있다면 git init을 다시 실행할 필요가 없다.
GitHub에 있는 저장소를 처음 내려받을 때 사용한다.
git clone 저장소_URL
예시는 다음과 같다.
git clone https://github.com/Songjeongkeun/mysite.git
원격 저장소의 변경 내용을 내려받고 현재 브랜치에 병합한다.
git pull
원격 저장소의 변경 이력만 내려받고 자동으로 병합하지 않을 때는 다음 명령을 사용한다.
git fetch
Author identity unknown
사용자 이름과 이메일을 설정한다.
git config --global user.name "사용자 이름"
git config --global user.email "example@email.com"
origin이 이미 존재하는 경우remote origin already exists
현재 등록된 주소를 확인한다.
git remote -v
주소를 변경한다.
git remote set-url origin 새로운_저장소_URL
또는 기존 연결을 삭제한 뒤 다시 등록한다.
git remote remove origin
git remote add origin 저장소_URL
src refspec main does not match any
커밋이 아직 없거나 현재 브랜치 이름이 main이 아닐 때 발생할 수 있다.
git status
git branch
git add .
git commit -m "프로젝트 첫 커밋"
git branch -M main
git push -u origin main
GitHub에서 README 등을 먼저 생성한 경우 로컬 저장소와 원격 저장소의 이력이 달라 Push가 거절될 수 있다.
먼저 원격 변경 내용을 가져온다.
git pull origin main
충돌이 발생하면 파일을 수정하고 다시 커밋한 뒤 Push한다.
git pull
git status
git status
git diff
git add .
git diff --staged
git commit -m "변경 내용을 설명하는 메시지"
git push
전체 흐름을 정리하면 다음과 같다.
원격 변경 가져오기
git pull
↓
파일 작성 또는 수정
↓
변경 상태 확인
git status
↓
커밋할 파일 선택
git add
↓
변경 이력 저장
git commit
↓
GitHub에 업로드
git push
| 명령어 | 설명 |
|---|---|
git init | 현재 폴더에 Git 저장소를 생성한다 |
git status | 파일의 현재 변경 상태를 확인한다 |
git add 파일명 | 특정 파일을 Staging Area에 추가한다 |
git add . | 현재 디렉터리의 모든 변경 사항을 추가한다 |
git commit -m "메시지" | 스테이징된 변경 내용을 커밋한다 |
git log --oneline | 커밋 이력을 간단하게 확인한다 |
git diff | 스테이징 전 변경 내용을 확인한다 |
git diff --staged | 스테이징된 변경 내용을 확인한다 |
git branch | 브랜치 목록과 현재 브랜치를 확인한다 |
git remote -v | 등록된 원격 저장소를 확인한다 |
git push | 로컬 커밋을 원격 저장소로 전송한다 |
git pull | 원격 변경 내용을 가져와 병합한다 |
git clone URL | 원격 저장소를 복제한다 |
Git은 단순히 파일을 GitHub에 올리는 도구가 아니다. 파일의 변경 과정을 하나의 버전으로 기록하고, 필요할 때 과거 상태를 확인하거나 여러 개발자의 작업을 안전하게 병합하기 위한 도구다.
처음에는 다음 네 명령어의 흐름을 정확하게 이해하는 것이 중요하다.
git status
git add .
git commit -m "커밋 메시지"
git push
명령어를 외우는 것보다 Working Directory → Staging Area → Repository → Remote Repository로 이어지는 흐름을 이해하면 Git을 더 안전하게 사용할 수 있다.