Git과 GitHub 기초

Kingmo·2022년 3월 14일
post-thumbnail

개발자에게 Git은 단순한 툴이 아닌 필수적인 업무 인프라다.

'최종.ppt', '진짜_최종.ppt'와 같은 비효율적인 파일 관리를 벗어나, 코드의 변경 이력을 체계적으로 추적하고 팀원들과 안전하게 협업하기 위함이다.

1. Git과 GitHub의 개념 차이

  • Git: 2005년 리누스 토르발스가 만든 분산 버전 관리 시스템(DVCS)이다. 로컬 컴퓨터에서 코드의 변경 이력(누가, 언제, 무엇을 수정했는지)을 기록하고, 잘못된 변경을 이전 시점으로 되돌릴 수 있게 해주는 프로그램이다.
  • GitHub: Git으로 기록한 프로젝트 이력과 코드 파일들을 클라우드 환경에 보관해 주는 원격 저장소 호스팅 서비스다. 다른 개발자들과 코드를 공유하고 협업(PR, 코드 리뷰 등)할 수 있는 플랫폼 역할을 한다.

2. Git 핵심 영역과 기본 용어

Git은 작업 공간을 크게 세 가지 영역으로 나누어 관리한다.

  • Working Tree (실제 작업 파일)
  • -> (git add)
  • Staging Area (커밋 대기 상태)
  • -> (git commit)
  • Repository (로컬 저장소)
용어설명
Working Tree작업자가 현재 로컬에서 코드를 작성하고 수정하는 실제 디렉터리 공간.
Staging Area다음 커밋에 포함할 변경 사항들을 선별해 올려두는 임시 대기 영역
Repository커밋(버전) 히스토리가 완전히 영구 기록되는 저장소 (.git 디렉터리).
CommitStaging Area에 올라간 파일들의 스냅샷을 영구적으로 저장소에 확정·기록하는 작업.
HEAD현재 작업 중인 브랜치의 가장 최신 커밋을 가리키는 포인터.
Branch독립적으로 작업을 진행하기 위한 일종의 분기점(가지). 기존 코드에 영향을 주지 않고 안전하게 새 기능을 개발할 수 있다.
Merge특정 브랜치에서 완료된 작업 내역을 대상 브랜치(main 등)로 합치는 작업.

3. Git 필수 명령어 치트시트

기본 저장소 관리 및 작업 흐름

명령어기능 및 사용법
git init현재 폴더에 새로운 Git 로컬 저장소를 초기화 (.git 생성)
git status작업 디렉터리와 Staging Area의 파일 상태(수정, 추적 여부) 확인
git add <파일명>특정 파일의 변경 사항을 Staging Area에 추가
git add .현재 디렉터리 이하의 모든 변경 파일을 Staging Area에 일괄 추가
git commit -m "메시지"Staging Area의 파일들을 메시지와 함께 새 커밋으로 확정
git log현재 브랜치의 커밋 히스토리(작성자, 날짜, 해시값 등) 확인

브랜치 관리

명령어기능 및 사용법
git branch로컬 브랜치 목록 확인
git branch <이름>새 브랜치 생성
git switch <이름> / git checkout <이름>해당 브랜치로 이동
git switch -c <이름> / git checkout -b <이름>브랜치 생성과 동시에 해당 브랜치로 이동
git branch -d <이름>특정 브랜치 삭제
git merge <브랜치>현재 위치한 브랜치에 대상 브랜치의 변경 내역을 병합

원격 저장소 연동

명령어기능 및 사용법
git remote -v현재 연결된 원격 저장소 주소 목록 확인
git remote add origin <URL>로컬 저장소에 원격 저장소(origin) 등록
git push <저장소명> <브랜치명>로컬 커밋 내역을 원격 저장소의 특정 브랜치로 업로드
git pull <저장소명> <브랜치명>원격 저장소의 최신 커밋을 가져와 현재 로컬 브랜치와 자동으로 병합
git fetch origin원격 저장소의 최신 이력만 다운로드 (자동 병합하지 않음)
git clone <URL>원격 저장소 전체를 로컬에 복제

작업 임시 보관

명령어기능 및 사용법
git stash아직 커밋하지 않은 작업 내역을 임시 스택 공간에 안전하게 저장
git stash pop스택에 임시 보관해 둔 작업 내역을 다시 꺼내와 작업 트리에 복원

4. 실전 워크플로우

로컬 프로젝트를 GitHub에 최초 업로드할 때

# 1. 로컬 저장소 초기화
git init

# 2. 원격 저장소(GitHub Repository) 연결
git remote add origin https://github.com/사용자이름/저장소이름.git

# 3. 작업 파일 스테이징 및 첫 커밋
git add .
git commit -m "feat: 첫 커밋 및 프로젝트 초기화"

# 4. 기본 브랜치(main 또는 master)로 원격 저장소에 푸시
git branch -M main
git push -u origin main

주의: 하위 디렉터리 내에 실수로 .git 폴더가 중첩 생성된 경우 Git 서브모듈 충돌이 일어나 파일 추적이 비정상적으로 동작할 수 있다. 의도하지 않은 .git이 하위에 있다면 해당 폴더를 삭제(rm -rf .git)한 뒤 다시 add해야 한다.

기존 프로젝트 클론 및 개발 환경 세팅

# 저장소 복제
git clone https://github.com/사용자이름/저장소이름.git
cd 저장소이름

# git에는 용량이 큰 node_modules를 올리지 않으므로(보통 .gitignore 처리)
# package.json에 명시된 의존 패키지를 직접 설치해주어야 한다.
yarn install
# 또는 npm install

# 개발 서버 실행
yarn dev
  • 포트 충돌이 발생하거나 동시에 두 개 이상의 로컬 서버를 띄워야 할 경우 -p 플래그로 포트를 분리한다.
yarn dev -p 3001

5. Git Fork vs Git Clone 차이점

협업 시 오픈소스 기여나 권한 분리를 위해 fork와 clone을 정확히 구분해야 한다.

  • Git Clone (원격 -> 로컬):
    • 특정 원격 저장소의 내용을 그대로 내 로컬 컴퓨터로 내려받는 행위다.
    • 해당 저장소에 쓰기(Write) 권한이 있는 팀원들이 주 저장소를 대상으로 작업할 때 사용한다.
  • Git Fork (원격 -> 내 원격):
    • 다른 사람의 GitHub 원격 저장소를 내 GitHub 계정 아래의 원격 저장소로 통째로 복제하는 기능이다. (Git 자체 기능이 아닌 GitHub 플랫폼 기능)
    • 원본 저장소에 직접 커밋할 권한이 없는 오픈소스 프로젝트에서 주로 사용한다.
    • 내 원격 저장소에서 자유롭게 코드를 수정한 뒤, 원본 프로젝트 관리자에게 "내 수정 사항을 가져가 검토해 달라"고 요청하는 절차가 바로 Pull Request(PR)다.
profile
Developer

0개의 댓글