Post

Github 기본 사용 방법

Git은 소프트웨어 형상관리도구의 한 종류로 프로그램 개발 과정의 변경이력을 관리하는 도구 입니다. Git을 웹상에서 제공하는 서비스 중에 가장 대중적인 곳이 github.com 입니다. 이 글에서는 처음 코딩을 공부하면서 개인적으로 학습한 내용을 github에 보관하기 위한 과정을 소개합니다. git의 전반적인 내용은 아니며 단순히 소스코드를 보관하는 정도의 수준에서 정리하였습니다.

Github 기본 사용 방법

Github 기본 사용 방법

#01. Git과 GitHub 이해하기

Git이란?

Git은 분산 버전 관리 시스템으로, 소스 코드의 변경 이력을 추적하고 관리하는 도구입니다.

GitHub란?

GitHub는 Git 저장소를 호스팅하는 웹 기반 플랫폼으로, 협업 도구와 프로젝트 관리 기능을 제공합니다.

주요 개념

용어설명
Repository (저장소)프로젝트 파일들과 변경 이력을 저장하는 공간
Commit변경사항을 저장소에 기록하는 행위
Branch독립적인 개발 라인
Merge다른 브랜치의 변경사항을 현재 브랜치에 병합
Push로컬 변경사항을 원격 저장소에 업로드
Pull원격 저장소의 변경사항을 로컬로 다운로드
Clone원격 저장소를 로컬로 복사
Fork다른 사람의 저장소를 내 계정으로 복사

#02. Git 클라이언트 설치

Windows

  1. https://git-scm.com/ 접속
  2. Download 버튼 클릭하여 설치 파일 다운로드
  3. 설치 과정에서 기본 설정 유지
  4. 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에 등록

  1. GitHub에 로그인 한 후 화면 우측상단의 계정 아이콘을 클릭하여 Settings 메뉴를 선택한다.

  2. 페이지 이동 후 왼쪽메뉴에서 SSH and GPG keys 메뉴 선택

  3. 화면 오른쪽의 New SSH Key 버튼을 클릭하여 페이지를 이동한다.

  4. 페이지 이동 후 내용 입력
    • Title: 컴퓨터를 구분할 수 있는 이름 (예: “My Laptop”, “Office Computer”)
    • Key type: Authentication Key (기본값)
    • Key: id_ed25519.pub 파일의 내용을 복사 후 붙여 넣는다.
  5. 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 fileREADME.md 파일 생성체크 권장
Add .gitignoregitignore 파일 생성언어에 맞게 선택
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 mainmain 브랜치를 원격에 푸시하고 추적 설정

이 과정을 수행하면 내 컴퓨터의 현재 작업 파일들이 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”

의미: 원격 저장소에 내 로컬에 없는 커밋(작업)이 있어서, 내 변경사항을 푸시할 수 없다는 의미입니다.

원인: 다른 사람이 먼저 원격 저장소에 커밋을 올렸거나, 내 로컬 저장소와 원격 저장소의 이력이 달라졌을 때 발생합니다.

해결 방법:

  1. 강제 푸시(git push --force)는 내 변경사항으로 원격 저장소를 덮어쓰므로 협업 시 주의해야 합니다.
  2. 일반적으로는 먼저 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.nameuser.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를 능숙하게 다루게 되면 더욱 효율적이고 안전한 코드 관리가 가능해집니다.

This post is licensed under CC BY 4.0 by the author.