팀장으로서 1주차에 팀원들과 작업물을 공유하고 개발하기 위해 깃허브에서 레퍼지토리를 만들었다. 하지만 그 과정이 이렇게 힘들줄 몰랐다.. 내가 작업해온 작업물을 이어서 개발하려고 계획을 세웠기에 언리얼 프로젝트 파일들을 깃허브 레퍼지토리에 올려두려고 했다. 이전 연습용 프로젝트들을 몇 번 올려봤기 때문에 쉽게 될 줄 알았으나 git push 를 하면 Git Bash 창에서는 성공적으로 됬다고 나오는데 막상 깃허브에 들어가보면 푸시가 안되는 상황이 반복이었다. 오류 메시지도 없어서 구글링으로 정확한 해결법도 찾기가 어려웠다. 약 4일을 밤새며 해결법을 찾아 헤메었고(정신 나가는 줄 알았다 ㅜ) 그 과정에서 익숙치 않던 Git에 대해 조금 알게되었고 그것들을 기록하고자 한다.
1) .git 폴더는 해당 프로젝트 파일들과 같은 위치에 있어야 한다.
git clone 은 새 폴더가 만들어지고 그 안에 .git 폴더가 있기 때문에 원래 프로젝트 파일들을 clone된 폴더에 옮겨주고 그곳에서 작업해야 한다. 하지만 초기 프로젝트 파일들에 git 을 연동하고 싶다면 git init으로 .git폴더를 만들어주고 git remote 로 만들어진 레퍼지토리와 연동 시켜줘야 한다.
2) git ignore는 프로젝트 파일이 있기 전에 생성해서 설정을 해두어야 한다.
언리얼 엔진이나 유니티 처럼 용량이 큰 프로젝트들은 깃허브에 모두 업로드가 안된다.( 추가 결제를 해야 한다.) 그렇기 때문에 중요도가 낮고 용량이 큰 파일들은 제외시켜주어야 하는데 그 기능을 하는것이 git ignore 파일이다. 깃허브에서 레퍼지토리를 생성하는 과정에서 ignore를 추가할것인지 선택할 수도 있고 아니면 txt파일로 만들어서 적어두면 된다. 언리얼 엔진 기본 gitignore 설정은 다음과 같다.
# Visual Studio 2015 user specific files
.vs/
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
*.ipa
# These project files can be generated by the engine
*.xcodeproj
*.xcworkspace
*.sln
*.suo
*.opensdf
*.sdf
*.VC.db
*.VC.opendb
# Precompiled Assets
SourceArt/**/*.png
SourceArt/**/*.tga
# Binary Files
Binaries/*
Plugins/*/Binaries/*
# Builds
Build/*
# Whitelist PakBlacklist-<BuildConfiguration>.txt files
!Build/*/
Build/*/**
!Build/*/PakBlacklist*.txt
# Don't ignore icon files in Build
!Build/**/*.ico
# Built data for maps
*_BuiltData.uasset
# Configuration files generated by the Editor
Saved/*
# Compiled source files for the engine to use
Intermediate/*
Plugins/*/Intermediate/*
# Cache files for the editor to use
DerivedDataCache/*
3) 스테이지에 존재하는 파일 제거로 일반적인 커밋이나 푸시 오류를 해결할 수 있다.
git rm --cached . -rf
4) [!중요!] 어떤 파일 자체가 매우 클 경우 오류가 발생하는데 이는 git lfs라는 것을 이용하여 업로드 한다.
예시 오류코드
remote: error: this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
해결 방법은 git lfs 기능을 이용하는것. 이것은 100MB 이상의 파일이 있을 때 지정한 파일을 작게 조각내어 commit을 할 수 있도로 해주는 기능이다. 언리얼 기준으로 대표적인 예시로는
해당 프로젝트 위치 git bash에서
git lfs install //lfs 설치하면 gitattributes 라는 파일이 생성된다.
git lfs track ".uasset" //대표적으로 큰 파일인 .uasset을 .gitattributes에 추가
git lfs track ".umap" //대표적으로 큰 파일인 .umap을 .gitattributes에 추가
여기서 이미 대용량 파일을 포한하는 commit을 한 경우라면 bfg를 설치해서 해결한다.
brew install bfg //설치
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M
git repack && git gc //2번 오류시
5)[!중요!] git 원격 repository에 한 번에 큰 용량 파일들 or 매우 작은 용량의 다수의 파일들을 push 하는 경우 에러가 발생한다.
내가 해당되었던 문제였고 이를 식별하고 해결법을 찾는데 정말 고생했었다. 내가 Git에 대해 무지한게 큰 원인이지 않았나.. 내가 경험한 에러는 다음과 같다.
error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500
HTTP 500 에러는 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에서 발생한 오류를 총칭하는 에러 코드이다.
다시 말해 구체적이기 보다는 추상적인 에러 코드이고 구글링 해결법도 중구난방으로 나왔다. Git Desktop으로도 생성해봤는데 거기서는 인터넷 연결 문제라고 뜬다.
시도한 해결법 첫 번째,
git config --global http.postBuffer 524288000
버퍼 한계를 뚫어주는것 같은데 내 문제 해결법은 아니었다.
시도한 해결법 두 번쨰,
어떤 글에서 Git Desktop에서 Help > Show log in explorer 에서 푸시 과정 로그를 확인해보고 구글링 해보라고 해서 찾아보니 문제점을 찾을 수 있었다.
모든 로그에서 2.0GiB일 때 에러가 발생한 것이었다. 깃허브에 한 번의 푸시 과정에서 가능한 최대 용량은 2GB였던 것이었다. 그래서 커밋할 내역들을 나누어서 여러 차례 올리면 해결이다. 나는 Git Desktop에서 커밋 내역을 범주에 따라 3번 나누어 푸시했고 드디어 성공했다. git bash 에서는 git add -p 명령어로 선택적으로 파일을 스테이징할 수 있다고 한다. 나중에 하나하나 경로마다 찾아보니 내가 사용하는 에셋 폴더 한 개만 2GB를 약간 넘은 크기였다..
번외로 이미 만들어진 언리얼 프로젝트의 git을 엔진에서 연동 시키는 법은 오른쪽 하단에 있는 Revision Control을 이용하는 방법도 있었다.
'개발 일지 > 언리얼' 카테고리의 다른 글
[캡스톤_01] Only Treasure Hunt 발표 보고서 및 시연 영상 (0) | 2025.03.30 |
---|---|
[캡스톤_01] 2024 second semester Capston Design I Plan (0) | 2024.09.09 |