곧 내일배움캠프에서 Unreal과 C++을 활용해서 fps 게임을 만드는 팀프로젝트가 시작된다. git을 사용해서 진행되기도 하고 앞으로 내가 게임 개발자로서 git은 필수이므로 정리하고자 한다.
Git은 크게 로컬 저장소(Local Repository), 원격 저장소(Remote Repository), 그리고 작업 디렉토리(Working Directory)로 구성
Git은 3개의 주요 영역을 통해 파일을 관리한다.
✅ Working Directory 작업 영역
실제 파일을 수정하는 영역(VS, VScode, Rider 등)
git add
를 사용해서 Staging Area로 이동 가능
✅ Staging Area
커밋할 준비가 된 파일이 저장되는 곳
git commit
을 하면 이곳의 파일이 Local Repository (로컬 저장소)에 저장
✅ Local Repository
사용자의 컴퓨터에 저장된 Git 데이터베이스
커밋(Commit)된 파일이 저장되는 곳
git push
를 하면 Remote Repository (원격 저장소)로 업로드
✅ Remote Repository
GitHub, GitLab, Bitbucket 과 같은 호스팅 서비스에 저장된 Git 저장소
여러 개발자들과 협업 가능
git pull
로 최신 내용을 가져올 수 있다.
🔥 정리하면
git add
: Working Directory → Staging Area
git commit
: Staging Area → Local Repository
git push
: Local Repository → Remote Repository
git pull
: Remote Repository → Working Directory
브랜치는 독립적인 작업 공간.
Git에서는 메인(Main) 브랜치에서 가지(Branch)처럼 새로운 브랜치를 만들어서 작업할 수 있다.
메인 브랜치 (main
또는 master
)
작업 브랜치 (feature-branch, bugfix-branch)
🔥 즉, 브랜치는 "메인에서 빠져나온 가지" 같은 개념
PR(Pull Request)
브랜치에서 작업한 내용을 메인에 병합할 때 **"내가 작업한 내용을 메인 브랜치에 병합(Merge)해도 될까요?" 라고 요청하는 과정
✅ PR의 핵심기능
코드 리뷰(Code Review)가능 → 팀원들이 PR을 확인하고 피드백 가능
충돌 확인 가능 → 메인 브랜치와 내 코드가 충돌하는지 체크 가능
CI/CD 자동 테스트 실행 가능 → PR을 올리면 자동으로 코드 테스트가 돌도록 설정 가능
🔥 즉, PR을 올리면 팀원들이 내 코드를 검토하고, 메인 브랜치에 반영할지 결정하는 과정
main
에서 feature-branch
를 생성git checkout -b feature-branch
git add .
git commit -m "새로운 기능 추가"
git push origin feature-branch
팀원들의 코드 리뷰 & 피드백
문제 없으면 main
에 병합(Merge)
✅ git init
(저장소 초기화)
mkdir 폴더명
, cd 폴더명
1번의 방법으로 해당 폴더로 이동 or 2번 방법을 통해 폴더로 생성 및 이동git init
: Git 저장소를 새로 만들 때 사용한다.
.git
이라는 숨겨진 폴더가 생성되고, Git이 해당 디렉터리를 관리하기 시작
✅ git clone
(원격 저장소를 로컬로 복제)
원격 저장소에서 내 컴퓨터로 저장소를 복사할 때 사용
다른 사람이 만든 프로젝트나 내가 관리하는 저장소를 가져와서 로컬에서 작업할 수 있다.
git clone https://github.com/username/awesome-project.git
main
또는 master
브랜치를 가져옴.✅ git add
, git commit -m " "
(파일 스테이징 & 커밋)
git add <파일명> // 특정 파일 스테이징
git add . // 모든 변경 사항 스테이징
git commit -m "커밋 메세지" // 변경 사항 커밋
git add
: 워킹 디렉토리 → 스테이징 영역에 올림
git commit -m " "
: 스테이징 영역 → 로컬 레포지토리에 저장
✅ git status
(상태 확인)
git status
: 현재 git 저장소의 상태를 확인하는 명령어. 어떤파일이 변경되었는지, 스테이징 되었는지 확인 가능✅ git push
(원격 저장소에 푸시)
git push origin main
✅ git pull
(원격 저장소에서 가져오기)
git pull origin main // 자동으로 병합
git fetch origin main // 변경 사항만 가져오고 병합은 하지 않음
git pull
은 git fetch
+ git merge
라고도 할 수 있다.✅ git checkout main
, git merge
(브랜치 병합)
브랜치를 병합하여 변경 사항을 메인 브랜치에 반영
git checkout main
: 현재 작업 중인 브랜치를 main
으로 변경하는 명령
main
브랜치로 이동 (스위칭)git commit
으로 저장해야 이동 가능git pull
사용git checkout -b feature-branch
이런식으로 만들면서 해당 브랜치로 이동도 가능git switch
를 사용하는 것이 좋음git merge feature-branch
: 이 명령어는 현재 main
브랜치에 feature-branch
브랜치의 변경 사항을 병합하는 역할
🔥 병합 과정
feature-branch
에서 작업을 완료하고 commit
한 후 main
브랜치로 이동git merge feature-branch
실행git commit
필요 ❌✅ 가벼운 예제
# 1. 새로운 브랜치에서 생성 및 이동
git checkout -b feature-branch
# (파일 수정 후)
# 2. 모든 변경사항 스테이징
git add .
git commit -m "새로운 기능 추가"
# 3. main 브랜치로 이동
git checkout main
# 4. 최신 상태로 업데이트 (충돌 방지)
git pull origin main
# 5. feature-branch 병합
git merge feature-branch
# 6. 병합 완료 후, 필요하면 feature-branch 삭제
git branch -d feature-branch
Git은 기본적으로 대용량 파일을 효율적으로 관리하지 못한다. 그래서 Git LFS를 사용하면 대용량 파일을 저장소가 아닌 별도 서버에 저장할 수 있다.
✅ 동작 원리
실제 파일은 LFS에 저장되고 Git 저장소 (리모트 레파지토리) 에서는 파일의 포인터만 저장
어떤 파일을 리모트 레파지토리에 저장할지 LFS에 저장할지 규칙을 .gitattributes
파일에 규칙을 정의할 수 있다.
🔥 즉, 파일을 Commit을 하면 .gitattributes
에 정해진 규칙에 따라 Git은 LFS로 설정된 파일 유형을 인식하고 파일 내용을 LFS서버로 전송. Git 저장소에서는 해당 파일의 포인터만 저장.