Github 기본 사용 방법
Git은 소프트웨어 형상관리도구의 한 종류로 프로그램 개발 과정의 변경이력을 관리하는 도구 입니다. Git을 웹상에서 제공하는 서비스 중에 가장 대중적인 곳이 github.com 입니다. 이 글에서는 처음 코딩을 공부하면서 개인적으로 학습한 내용을 github에 보관하기 위한 과정을 소개합니다. git의 전반적인 내용은 아니며 단순히 소스코드를 보관하는 정도의 수준에서 정리하였습니다.
Github 기본 사용 방법
#01. Git과 GitHub 이해하기
Git이란?
Git은 분산 버전 관리 시스템으로, 소스 코드의 변경 이력을 추적하고 관리하는 도구입니다.
GitHub란?
GitHub는 Git 저장소를 호스팅하는 웹 기반 플랫폼으로, 협업 도구와 프로젝트 관리 기능을 제공합니다.
주요 개념
용어 | 설명 |
---|---|
Repository (저장소) | 프로젝트 파일들과 변경 이력을 저장하는 공간 |
Commit | 변경사항을 저장소에 기록하는 행위 |
Branch | 독립적인 개발 라인 |
Merge | 다른 브랜치의 변경사항을 현재 브랜치에 병합 |
Push | 로컬 변경사항을 원격 저장소에 업로드 |
Pull | 원격 저장소의 변경사항을 로컬로 다운로드 |
Clone | 원격 저장소를 로컬로 복사 |
Fork | 다른 사람의 저장소를 내 계정으로 복사 |
#02. Git 클라이언트 설치
Windows
- https://git-scm.com/ 접속
- Download 버튼 클릭하여 설치 파일 다운로드
- 설치 과정에서 기본 설정 유지
- Git Bash, Git CMD 선택 가능
macOS
방법 1: Xcode Command Line Tools
1
$ xcode-select --install
방법 2: Homebrew 사용
1
$ brew install git
Linux (Ubuntu/Debian)
1
2
$ sudo apt update
$ sudo apt install git
설치 확인
1
$ git --version
#03. Git 전역 설정
명령프롬프트 혹은 터미널에서 사용자 정보를 입력한다.
특별한 문제가 없다면 명령어 입력후 아무런 내용도 표시되지 않는다.
1
2
3
$ git config --global user.name "leekh"
$ git config --global user.email "leekh4232@gmail.com"
$ git config --global core.autocrlf true
추가 유용한 설정
1
2
3
4
5
6
7
8
9
10
11
# 기본 브랜치명을 main으로 설정
$ git config --global init.defaultBranch main
# 편집기 설정 (VS Code 사용 시)
$ git config --global core.editor "code --wait"
# 한글 파일명 깨짐 방지
$ git config --global core.quotepath false
# 대소문자 구분 설정
$ git config --global core.ignorecase false
설정 내용 확인 방법
1
2
# 전체 설정 확인
$ git config --list
#04. 인증서 설정
1. SSH vs HTTPS 인증
방식 | 장점 | 단점 |
---|---|---|
SSH | 안전, 비밀번호 입력 불필요 (권장) | 초기 설정 복잡 |
HTTPS | 설정 간단 | 매번 인증 필요 |
2. SSH 인증서 생성하기
명령프롬프트에서 인증서 생성을 위한 명령어를 실행
이 명령은 컴퓨터마다 최초 1회만 수행하면 된다.
1
$ ssh-keygen -t ed25519 -C "leekh4232@gmail.com"
명령어 입력후 진행되는 과정에서는 엔터키만 입력한다.
1
2
3
4
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519): [엔터]
Enter passphrase (empty for no passphrase): [엔터]
Enter same passphrase again: [엔터]
정상적으로 완료된다면 사용자 홈디렉토리 안에 .ssh
라는 이름의 폴더가 생성되고 그 안에 id_ed25519
, id_ed25519.pub
인 두 개의 파일이 생성된다.
id_ed25519
: 개인키 (절대 공유하면 안됨)id_ed25519.pub
: 공개키 (GitHub에 등록할 키)
이 폴더나 파일들이 삭제될 경우 인증서를 새로 생성해야 한다.
3. 인증서를 GitHub에 등록
GitHub에 로그인 한 후 화면 우측상단의 계정 아이콘을 클릭하여
Settings
메뉴를 선택한다.페이지 이동 후 왼쪽메뉴에서
SSH and GPG keys
메뉴 선택화면 오른쪽의
New SSH Key
버튼을 클릭하여 페이지를 이동한다.- 페이지 이동 후 내용 입력
- Title: 컴퓨터를 구분할 수 있는 이름 (예: “My Laptop”, “Office Computer”)
- Key type:
Authentication Key
(기본값) - Key:
id_ed25519.pub
파일의 내용을 복사 후 붙여 넣는다.
Add SSH key
버튼 클릭
4. SSH 연결 테스트
1
$ ssh -T git@github.com
성공 시 다음과 같은 메시지가 출력됩니다:
1
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
#05. 새로운 작업 시작하기
1. GitHub에 새로운 저장소 생성
https://github.com/new
또는 GitHub 메인 페이지에서 New
버튼 클릭
입력항목 | 설명 | 권장사항 |
---|---|---|
Repository name | 저장소 이름 | 영문, 숫자, 하이픈(-) 조합 |
Description | 간략한 설명 (선택사항) | 프로젝트 목적을 명확히 |
Public/Private | 공개/비공개 설정 | 학습용: Public, 회사: Private |
Add a README file | README.md 파일 생성 | 체크 권장 |
Add .gitignore | gitignore 파일 생성 | 언어에 맞게 선택 |
Choose a license | 라이선스 선택 | 오픈소스: MIT 권장 |
저장소가 생성되면 주소는 아래의 형식임
1
git@github.com:사용자아이디/저장소이름.git
2. .gitignore 파일 이해하기
.gitignore
파일은 Git이 추적하지 않을 파일들을 지정합니다.
일반적인 .gitignore 패턴
# 운영체제 파일
.DS_Store
Thumbs.db
# 에디터 파일
.vscode/
.idea/
*.swp
*.swo
# 로그 파일
*.log
logs/
# 종속성 폴더
node_modules/
vendor/
# 환경 변수 파일
.env
.env.local
# 빌드 출력
dist/
build/
*.exe
*.dll
# 임시 파일
*.tmp
*.bak
언어별 .gitignore
Python:
__pycache__/
*.pyc
*.pyo
venv/
.pytest_cache/
Node.js:
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
Java:
*.class
*.jar
target/
.mvn/
3. 내 컴퓨터에서 진행중인 작업물을 저장소와 연결하기
작업 폴더 위치에서 명령프롬프트를 연다.
이 작업은 최초 1회만 수행한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Git 저장소 초기화
$ git init
# 기본 브랜치를 main으로 설정
$ git branch -M main
# 현재 폴더 내의 모든 파일을 스테이징 영역에 추가
$ git add -A
# 첫 번째 커밋
$ git commit -m "Initial commit"
# 원격 저장소 연결
$ git remote add origin 저장소주소
# 원격 저장소에 푸시
$ git push -u origin main
명령어 설명
명령어 | 설명 |
---|---|
git init | 현재 폴더를 Git 저장소로 초기화 |
git branch -M main | 기본 브랜치명을 main으로 변경 |
git add -A | 모든 변경사항을 스테이징 |
git commit -m "메시지" | 변경사항을 커밋 |
git remote add origin URL | 원격 저장소 URL 등록 |
git push -u origin main | main 브랜치를 원격에 푸시하고 추적 설정 |
이 과정을 수행하면 내 컴퓨터의 현재 작업 파일들이 GitHub에 업로드 된다.
이후 컴퓨터의 파일들이 삭제되어도 언제든지 GitHub으로부터 다시 복제할 수 있다.
#06. 다른 PC에서 GitHub에 등록된 작업을 가져오기
#02 ~ #04
까지 선행되어야 한다.
작업할 소스가 위치할 폴더에서 명령프롬프트를 열고 아래 명령어 중 하나를 사용한다.
기존에 작업을 진행하던 PC에서도 GitHub과 연결된 폴더가 삭제된 경우 이 과정을 수행
1
2
3
4
5
6
7
8
# 저장소를 현재 폴더에 복제
$ git clone 저장소주소
# 특정 폴더명으로 복제
$ git clone 저장소주소 폴더명
# 특정 브랜치만 복제
$ git clone -b 브랜치명 저장소주소
예시
- 학원 컴퓨터에 GitHub으로부터 clone
- 집 컴퓨터에 GitHub으로부터 clone
- 새로운 팀원이 프로젝트 참여 시
clone 후 확인사항
1
2
3
4
5
6
7
8
# 현재 브랜치 확인
$ git branch
# 원격 저장소 확인
$ git remote -v
# 최신 상태 확인
$ git status
#07. 현재 사용중인 컴퓨터에서 작업한 내역을 GitHub에 전송하기
1. 작업 내역을 업로드 대기상태로 등록
아래 명령어 중 하나를 필요에 따라 선택적으로 사용한다.
1
2
3
4
5
6
7
8
# 모든 변경사항 추가 (일반적인 경우)
$ git add -A
# 특정 파일만 추가
$ git add 파일명
# 특정 폴더만 추가
$ git add 폴더명/
2. 커밋 메시지 작성 규칙
좋은 커밋 메시지 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 기능 추가
$ git commit -m "feat: 사용자 로그인 기능 추가"
# 버그 수정
$ git commit -m "fix: 로그인 시 비밀번호 검증 오류 수정"
# 문서 업데이트
$ git commit -m "docs: README.md 설치 가이드 추가"
# 코드 리팩토링
$ git commit -m "refactor: 사용자 인증 로직 개선"
# 스타일 변경
$ git commit -m "style: 코드 포맷팅 적용"
커밋 메시지 컨벤션
타입 | 설명 |
---|---|
feat | 새로운 기능 추가 |
fix | 버그 수정 |
docs | 문서 변경 |
style | 코드 포맷팅, 세미콜론 누락 등 |
refactor | 코드 리팩토링 |
test | 테스트 코드 추가/수정 |
chore | 빌드 과정 또는 보조 도구 변경 |
4. 커밋하기
1
2
3
4
5
# 간단한 메시지로 커밋
$ git commit -m "간단한 메시지"
# 상세한 메시지로 커밋
$ git commit -m "제목" -m "상세 설명"
이 명령은 실제로 파일이 전송되는 것은 아님
업로드 대기상태로 등록하는 처리이므로 몇 번을 수행하더라도 이후 일괄 업로드하게 된다.
5. 업로드 대기상태의 내용들을 GitHub에 전송
1
2
3
4
5
6
7
8
9
10
11
# 현재 브랜치를 원격 저장소에 푸시
$ git push origin main
# 첫 푸시 시 (추적 브랜치 설정)
$ git push -u origin main
# 모든 브랜치 푸시
$ git push --all origin
# 태그도 함께 푸시
$ git push origin main --tags
Push 전 확인사항
1
2
3
4
5
6
7
8
# 커밋 히스토리 확인
$ git log --oneline
# 원격 저장소와 차이 확인
$ git log origin/main..main
# 푸시할 커밋 수 확인
$ git rev-list --count origin/main..main
#08. 다른 컴퓨터에서 push한 내용을 내려받기
1. 변경사항 가져오기
1
2
# 원격 변경사항을 가져와서 병합
$ git pull origin main
2. 충돌 해결
병합 충돌 발생 시
1
2
3
4
5
6
# 충돌 파일 확인
$ git status
# 충돌 해결 후 커밋
$ git add -A
$ git commit -m "충돌 해결"
충돌 표시 예시
1
2
3
4
5
<<<<<<< HEAD
내가 수정한 내용
=======
다른 사람이 수정한 내용
>>>>>>> origin/main
#09. 유용한 Git 명령어
1. 히스토리 관리
1
2
3
4
5
6
7
8
9
10
11
# 커밋 히스토리 확인
$ git log --oneline --graph --all
# 특정 파일의 변경 이력
$ git log --follow -- 파일명
# 특정 작성자의 커밋만 보기
$ git log --author="작성자명"
# 특정 기간의 커밋만 보기
$ git log --since="2024-01-01" --until="2024-12-31"
2. 되돌리기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 최근 커밋 취소 (커밋은 유지, 변경사항만 스테이징)
$ git reset --soft HEAD~1
# 최근 커밋 취소 (변경사항을 작업 디렉토리로)
$ git reset --mixed HEAD~1
# 최근 커밋 완전 취소 (변경사항 삭제)
$ git reset --hard HEAD~1
# 특정 파일만 되돌리기
$ git checkout HEAD -- 파일명
# 커밋 수정 (메시지 또는 파일 추가)
$ git commit --amend
#10. 문제 해결
1. 자주 발생하는 오류
“fatal: remote origin already exists”
의미: 이미 원격 저장소(origin)가 등록되어 있을 때, 동일한 이름으로 다시 추가하려고 하면 발생하는 오류입니다.
원인: git remote add origin ...
명령을 여러 번 실행하거나, 이미 원격 저장소가 연결된 상태에서 다시 추가하려고 할 때 발생합니다.
해결 방법: 기존 origin을 삭제(git remote remove origin
)한 후, 새로 추가하면 됩니다.
1
2
$ git remote remove origin
$ git remote add origin 새로운주소
“Updates were rejected because the remote contains work”
의미: 원격 저장소에 내 로컬에 없는 커밋(작업)이 있어서, 내 변경사항을 푸시할 수 없다는 의미입니다.
원인: 다른 사람이 먼저 원격 저장소에 커밋을 올렸거나, 내 로컬 저장소와 원격 저장소의 이력이 달라졌을 때 발생합니다.
해결 방법:
- 강제 푸시(
git push --force
)는 내 변경사항으로 원격 저장소를 덮어쓰므로 협업 시 주의해야 합니다. - 일반적으로는 먼저 pull로 원격 변경사항을 받아온 뒤, 충돌을 해결하고 다시 push합니다.
1
2
3
4
5
6
# 강제 푸시 (주의: 협업 시 사용 금지)
$ git push --force origin main
# 안전한 방법: 먼저 pull 후 push
$ git pull origin main
$ git push origin main
“Please tell me who you are”
의미: Git이 커밋 작성자의 이름과 이메일 정보를 알 수 없어서 커밋을 거부하는 오류입니다.
원인: user.name
과 user.email
설정이 되어 있지 않거나, 새로 설치한 환경에서 처음 커밋할 때 발생합니다.
해결 방법: 위 명령어로 사용자 정보를 전역 또는 로컬로 설정하면 해결됩니다.
1
2
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"
2. Git 명령어 도움말
1
2
3
4
5
6
7
# 특정 명령어 도움말
$ git help add
$ git help commit
$ git help push
# 간단한 도움말
$ git add --help
#14. 마무리
Git과 GitHub는 현대 소프트웨어 개발에서 필수적인 도구입니다. 이 가이드를 통해 기본적인 사용법을 익혔다면, 다음과 같은 순서로 실력을 향상시킬 수 있습니다:
Git과 GitHub를 능숙하게 다루게 되면 더욱 효율적이고 안전한 코드 관리가 가능해집니다.