Git & LFS

정혜창·2025년 2월 14일
0

독학

목록 보기
23/28

곧 내일배움캠프에서 Unreal과 C++을 활용해서 fps 게임을 만드는 팀프로젝트가 시작된다. git을 사용해서 진행되기도 하고 앞으로 내가 게임 개발자로서 git은 필수이므로 정리하고자 한다.



🎮 Git?

  • Git은 분산 버전 관리 시스템으로, 코드의 변경사항을 추적하고, 협업을 쉽게 할 수 있도록 도와준다.

1️⃣ Git의 핵심 개념

Git은 크게 로컬 저장소(Local Repository), 원격 저장소(Remote Repository), 그리고 작업 디렉토리(Working Directory)로 구성

📌 Git의 작동 방식

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




2️⃣ Branch

📌 기본 개념

브랜치는 독립적인 작업 공간.

Git에서는 메인(Main) 브랜치에서 가지(Branch)처럼 새로운 브랜치를 만들어서 작업할 수 있다.

  • 메인 브랜치 (main 또는 master)

    • 프로젝트의 중심이 되는 브랜치. 최종적으로 안정적인 코드가 들어감
  • 작업 브랜치 (feature-branch, bugfix-branch)

    • 새로운 기능을 개발, 버그 수정할 때 메인 브랜치에서 따로 독립적인 공간을 만들어 작업하는 브랜치

🔥 즉, 브랜치는 "메인에서 빠져나온 가지" 같은 개념

📌 PR(Pull Request)

브랜치에서 작업한 내용을 메인에 병합할 때 **"내가 작업한 내용을 메인 브랜치에 병합(Merge)해도 될까요?" 라고 요청하는 과정

PR의 핵심기능

  • 코드 리뷰(Code Review)가능 → 팀원들이 PR을 확인하고 피드백 가능

  • 충돌 확인 가능 → 메인 브랜치와 내 코드가 충돌하는지 체크 가능

  • CI/CD 자동 테스트 실행 가능 → PR을 올리면 자동으로 코드 테스트가 돌도록 설정 가능

🔥 즉, PR을 올리면 팀원들이 내 코드를 검토하고, 메인 브랜치에 반영할지 결정하는 과정


📌 PR 하는 과정

  1. main 에서 feature-branch를 생성
git checkout -b feature-branch
  1. 코드 수정 후 Commit & Push
git add .
git commit -m "새로운 기능 추가"
git push origin feature-branch
  1. GitHub에서 "New Pull Request" 버튼 클릭itHub에서 "New Pull Request" 버튼 클릭
  1. 팀원들의 코드 리뷰 & 피드백

  2. 문제 없으면 main에 병합(Merge)




2️⃣ Git 주요명령어 & 작동방식

git init (저장소 초기화)

  1. 내 PC에서 저장소를 만들때 우선 만들고 싶은 폴더(디렉토리)에서 cmd를 킨다.
  1. 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
  • 적용 결과 : GitHub서버에 코드가 업로드 됌

git pull (원격 저장소에서 가져오기)

  • 최신 변경 사항을 가져옴
git pull origin main	// 자동으로 병합
git fetch origin main	// 변경 사항만 가져오고 병합은 하지 않음
  • 사실상 git pullgit fetch + git merge 라고도 할 수 있다.

git checkout main, git merge (브랜치 병합)

  • 브랜치를 병합하여 변경 사항을 메인 브랜치에 반영

  • git checkout main : 현재 작업 중인 브랜치를 main으로 변경하는 명령

    • main 브랜치로 이동 (스위칭)
    • 만약 변경사항이 있다면 git commit 으로 저장해야 이동 가능
    • 최신 코드인지 확인하려면 git pull 사용
    • git checkout -b feature-branch 이런식으로 만들면서 해당 브랜치로 이동도 가능
    • 🕑 Git 2.23 이상에서는 git switch를 사용하는 것이 좋음
  • git merge feature-branch : 이 명령어는 현재 main 브랜치에 feature-branch 브랜치의 변경 사항을 병합하는 역할

🔥 병합 과정

  1. feature-branch 에서 작업을 완료하고 commit 한 후 main 브랜치로 이동
  2. git merge feature-branch 실행
  3. 변경 사항이 충돌이 없다면 병합 완료 ⭕
  4. 만약 충돌이 발생하면 직접 해결한 후 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

🎮 LFS?

Git은 기본적으로 대용량 파일을 효율적으로 관리하지 못한다. 그래서 Git LFS를 사용하면 대용량 파일을 저장소가 아닌 별도 서버에 저장할 수 있다.

✅ 동작 원리

  • 실제 파일은 LFS에 저장되고 Git 저장소 (리모트 레파지토리) 에서는 파일의 포인터만 저장

  • 어떤 파일을 리모트 레파지토리에 저장할지 LFS에 저장할지 규칙을 .gitattributes 파일에 규칙을 정의할 수 있다.

🔥 즉, 파일을 Commit을 하면 .gitattributes에 정해진 규칙에 따라 Git은 LFS로 설정된 파일 유형을 인식하고 파일 내용을 LFS서버로 전송. Git 저장소에서는 해당 파일의 포인터만 저장.


1️⃣ LFS 사용방법

profile
Unreal 1기

0개의 댓글