- Published on
git hook 및 git lfs를 활용한 3D 에셋 관리
- Authors
- Name
- Beni
- Tech Lead
git hook 및 git lfs를 활용한 3D 에셋 관리
안녕하세요, 리얼드로우 3D팀의 베니입니다. 이번 포스트에서는 git hook과 git lfs를 활용하여 3D 에셋을 효율적으로 관리하는 방법에 대해 알아보겠습니다.
git lfs란?
git lfs(Git Large File Storage)는 Git에서 대용량 파일을 효율적으로 관리하기 위한 확장 도구입니다. 일반적으로 Git은 텍스트 파일에 최적화되어 있어, 대용량 바이너리 파일을 다룰 때 성능 저하가 발생할 수 있습니다. git lfs는 이러한 문제를 해결하기 위해 대용량 파일을 별도의 저장소에 저장하고, Git에는 해당 파일의 포인터만 저장합니다.
git hook이란?
git hook은 Git 저장소에서 특정 이벤트가 발생할 때 자동으로 실행되는 스크립트입니다. 예를 들어, 커밋 전에 코드를 검사하거나, 푸시 전에 테스트를 실행하는 등의 작업을 자동화할 수 있습니다.
git hook과 git lfs의 결합
git hook과 git lfs를 결합하면, 대용량 파일을 자동으로 git lfs로 관리할 수 있습니다. 예를 들어, 커밋 전에 특정 크기 이상을 가진 파일을 git lfs로 추가하는 스크립트를 작성할 수 있습니다.
예시: 커밋 전에 3D 에셋을 git lfs로 추가하는 스크립트
#!/usr/bin/env bash
set -euo pipefail
# ===== 설정: 임계값 100MB =====
THRESH=$((100*1024*1024))
# git-lfs 설치 여부 확인
if ! command -v git-lfs >/dev/null 2>&1; then
echo "[pre-commit] git-lfs not found. Run 'git lfs install' first." >&2
exit 1
fi
# 스테이징된 추가/수정 파일 목록
files=$(git diff --cached --name-only --diff-filter=AM -z | tr '\0' '\n')
for f in $files; do
[ -f "$f" ] || continue
size=$(stat -c%s "$f" 2>/dev/null || stat -f%z "$f")
if [ "$size" -ge "$THRESH" ]; then
echo "[LFS] '$f' is $size bytes (>= $THRESH). Tracking with Git LFS..."
git lfs track -- "$f" >/dev/null
git add .gitattributes "$f"
echo "[LFS] Tracked + re-staged: $f"
fi
done
exit 0
이 스크립트는 커밋 전에 실행되어, 스테이징된 파일 중 크기가 100MB 이상인 파일을 자동으로 git lfs로 추가합니다.
스크립트 사용 방법
- 위 스크립트를
pre-commit
파일로 저장합니다. - 저장소의
.git/hooks/
디렉토리에pre-commit
- 파일에 실행 권한을 부여합니다:
chmod +x .git/hooks/pre-commit
(Linux/Mac) - 이제 커밋할 때마다 스크립트가 자동으로 실행되어 대용량 파일을 git lfs로 관리합니다.
이 스크립트는 repository에 git lfs install
이 되어있어야 합니다.
저희는 이 스크립트를 통해 3D 에셋 관리의 효율성을 크게 향상시켰습니다.
결론
git hook과 git lfs를 활용하면 3D 에셋을 효율적으로 관리할 수 있습니다. 자동화된 스크립트를 통해 대용량 파일을 쉽게 관리하고, 협업 환경에서 발생할 수 있는 문제를 최소화할 수 있습니다. 이 방법을 통해 여러분의 프로젝트 관리가 더욱 원활해지길 바랍니다. 감사합니다!