소개
이 랩에서는 Git Large File Storage (LFS) 를 사용하고 있는지 여부를 확인하는 방법을 배우게 됩니다. LFS 추적을 구성하는 데 중요한 .gitattributes 파일을 검토하는 것부터 시작하여 LFS 사용의 주요 지표를 살펴봅니다.
그런 다음 git lfs env 명령을 사용하여 리포지토리 내의 LFS 환경 및 설정을 확인합니다. 마지막으로, LFS 가 대용량 파일을 예상대로 활발하게 관리하고 있는지 확인하기 위해 LFS 추적 파일을 테스트합니다. 이 실습 방식을 통해 Git 프로젝트에서 LFS 통합을 식별하고 이해하는 데 필요한 실질적인 기술을 습득할 수 있습니다.
.gitattributes 파일 확인
이 단계에서는 Git LFS 가 대용량 파일을 추적하기 위해 .gitattributes라는 특수 파일을 사용하는 방법을 살펴봅니다. 이 파일은 Git 에게 Git 리포지토리에 직접 저장되는 대신 LFS 에서 처리해야 하는 파일을 알려줍니다.
먼저, 프로젝트 디렉토리에 있는지 확인해 보겠습니다. 터미널을 열고 다음을 입력합니다.
cd ~/project/my-time-machine
이제 나중에 Git LFS 에 추적하도록 지시할 더미 파일을 만들어 보겠습니다. large_image.png라고 부르겠습니다.
echo "This is a large image file placeholder." > large_image.png
이 명령은 large_image.png라는 파일을 생성하고 그 안에 텍스트를 넣습니다. 실제 시나리오에서는 이미지, 비디오 또는 아카이브와 같은 대용량 바이너리 파일이 됩니다.
다음으로, Git LFS 에 이 유형의 파일을 추적하도록 지시해야 합니다. git lfs track 명령을 사용하여 이 작업을 수행합니다. 이 명령은 또한 리포지토리에서 .gitattributes 파일을 자동으로 생성하거나 업데이트합니다.
git lfs track "*.png"
다음과 유사한 출력을 볼 수 있습니다.
Tracking "*.png"
이 명령은 Git LFS 에 .png 확장자를 가진 모든 파일을 추적하도록 지시합니다. 또한 .gitattributes 파일에 항목을 추가합니다.
이제 .gitattributes 파일의 내용을 살펴보고 무엇이 추가되었는지 확인해 보겠습니다.
cat .gitattributes
다음과 유사한 출력을 볼 수 있습니다.
*.png filter=lfs diff=lfs merge=lfs -text
.gitattributes 파일의 이 줄은 Git 에게 .png 파일에 LFS 를 사용하도록 지시하는 마법입니다. 패턴 *.png와 일치하는 파일의 경우, Git 이 diffing, merging 및 저장에 lfs 필터를 적용해야 함을 지정합니다. -text 부분은 Git 이 바이너리 파일을 텍스트로 처리하지 않도록 보장합니다.
.gitattributes 파일을 이해하는 것은 Git LFS 를 효과적으로 사용하는 데 핵심입니다. LFS 에서 관리할 대용량 파일 유형을 구성하는 방법이며, 주 Git 리포지토리를 작고 빠르게 유지합니다.
git lfs env 실행하여 LFS 확인
이 단계에서는 git lfs env 명령을 사용하여 Git LFS 환경을 확인하고 리포지토리 내에서 올바르게 설정되었는지 확인합니다. 이 명령은 Git LFS 설치 및 구성에 대한 유용한 정보를 제공합니다.
프로젝트 디렉토리에 아직 있는지 확인합니다.
cd ~/project/my-time-machine
이제 git lfs env 명령을 실행합니다.
git lfs env
다음과 유사한 출력을 볼 수 있습니다 (정확한 출력은 Git LFS 버전 및 시스템 구성에 따라 약간 다를 수 있습니다).
git-lfs/3.x.x (Linux; zsh)
git version 2.34.1
Endpoint=
https://github.com/labex/my-time-machine.git/info/lfs (auth=none)
Endpoint (SSH)=
git@github.com:labex/my-time-machine.git/info/lfs (auth=none)
LocalWorkingDir=/home/labex/project/my-time-machine
LocalGitDir=/home/labex/project/my-time-machine/.git
LocalGitStorageDir=/home/labex/project/my-time-machine/.git/lfs
LocalMediaDir=/home/labex/project/my-time-machine/.git/lfs/objects
LocalRecentObjectsDir=/home/labex/project/my-time-machine/.git/lfs/objects/sha256/recent
LocalRecentObjectsLogDir=/home/labex/project/my-time-machine/.git/lfs/objects/sha256/recent/logs
LocalTmpDir=/home/labex/project/my-time-machine/.git/lfs/tmp
LocalTriggers=
Disk space utilization:
du -s -h .git/lfs
4.0K .git/lfs
Git LFS initialized.
이 출력은 다음을 포함하여 많은 정보를 제공합니다.
- 사용 중인 Git LFS 의 버전.
- 사용 중인 Git 의 버전.
- LFS 엔드포인트 (LFS 파일이 푸시/풀될 위치, 이 랩에서는 원격을 사용하지 않음).
- Git LFS 가
.git디렉토리 내에 데이터를 저장하는 로컬 디렉토리. - LFS 객체의 디스크 공간 사용량 (아직 대용량 파일을 추가하지 않았으므로 현재 매우 작음).
- Git LFS 가 이 리포지토리에서 초기화되었음을 확인합니다.
git lfs env를 실행하는 것은 현재 리포지토리에서 Git LFS 가 설치 및 구성되었는지 빠르게 확인하는 좋은 방법입니다. LFS 가 데이터를 저장하는 위치를 이해하고 필요한 훅 (hook) 과 필터가 있는지 확인하는 데 도움이 됩니다.
LFS 추적 파일로 테스트
이 마지막 단계에서는 LFS-추적 파일을 Git 스테이징 영역에 추가하고 커밋합니다. 이를 통해 Git LFS 가 일반 파일과 어떻게 다르게 파일을 처리하는지 보여줍니다.
먼저, 올바른 디렉토리에 있는지 확인합니다.
cd ~/project/my-time-machine
이전 단계에서 large_image.png 파일을 이미 생성했고 Git LFS 를 구성하여 .png 파일을 추적하도록 했습니다. 이제 git add를 사용하여 파일을 스테이징 영역에 추가해 보겠습니다.
git add large_image.png
이 명령은 다음 커밋을 위해 파일을 스테이징합니다. Git LFS 는 .gitattributes의 패턴과 일치하기 때문에 large_image.png에 대해 이 작업을 가로챕니다. 전체 파일 내용을 Git 인덱스에 추가하는 대신 Git LFS 는 작은 "포인터" 파일을 추가합니다.
스테이징된 파일을 확인하기 위해 상태를 확인해 보겠습니다.
git status
large_image.png가 커밋할 준비가 된 새 파일임을 나타내는 출력을 볼 수 있습니다.
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitattributes
new file: large_image.png
1 단계에서 수정했기 때문에 .gitattributes도 스테이징되었음을 알 수 있습니다.
이제 변경 사항을 커밋해 보겠습니다.
git commit -m "Add LFS tracked image placeholder"
다음과 유사한 출력을 볼 수 있습니다.
[master (root-commit) abcdefg] Add LFS tracked image placeholder
2 files changed, X insertions(+)
create mode 100644 .gitattributes
create mode 100644 large_image.png
커밋 메시지는 .gitattributes와 large_image.png가 모두 커밋되었음을 확인합니다. 그러나 large_image.png의 실제 내용은 Git 커밋에 직접 저장되지 않습니다. 대신, 커밋은 작은 포인터 파일을 저장하고 대용량 파일 내용은 Git LFS 에서 관리합니다.
차이점을 확인하기 위해 git show를 사용하여 Git 에 저장된 파일의 내용을 살펴보겠습니다. 이 명령은 특정 커밋의 파일 내용을 표시합니다.
git show HEAD:large_image.png
다음과 유사한 출력을 볼 수 있습니다.
version https://git-lfs.github.com/spec/v1
oid sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
size 31
이것은 실제 "This is a large image file placeholder." 텍스트가 아닌 포인터 파일의 내용입니다. 이는 Git 이 대용량 파일에 대한 참조를 저장하고 Git LFS 가 실제 파일 내용을 관리하고 있음을 보여줍니다.
이것이 Git LFS 의 핵심 개념입니다. 대용량 파일에 대한 포인터만 저장하여 주 Git 리포지토리를 가볍게 유지하고, 대용량 파일 내용은 별도로 저장합니다.
요약
이 랩에서는 Git 리포지토리가 Git LFS 를 사용하는지 확인하는 방법을 배웠습니다. Git LFS 를 구성하는 데 중요한 역할을 하는 .gitattributes 파일의 역할을 이해하는 것으로 시작했습니다. 더미 파일을 생성하고 git lfs track을 사용하여 특정 확장자를 가진 파일을 관리하도록 Git LFS 에 지시했으며, 이 명령이 어떻게 자동으로 .gitattributes 파일을 필요한 구성으로 업데이트하는지 관찰했습니다. 그런 다음 .gitattributes 파일의 내용을 검토하여 git lfs track에 의해 추가된 항목을 확인하고, filter=lfs, diff=lfs, merge=lfs, 및 -text 속성의 의미를 이해했습니다.
또한 리포지토리 내에서 Git LFS 의 존재 및 구성을 확인하는 또 다른 방법으로 git lfs env 명령을 살펴보았습니다. 이 명령은 버전, 리포지토리 설정 및 추적된 파일 패턴을 포함하여 Git LFS 환경에 대한 자세한 정보를 제공하여 LFS 가 설정된 방식에 대한 포괄적인 개요를 제공합니다. 마지막으로, 구성된 패턴과 일치하는 파일을 추가하고 커밋하여 LFS 추적을 테스트하는 방법을 배웠으며, Git LFS 가 주 Git 리포지토리에 전체 내용을 저장하는 대신 대용량 파일을 올바르게 처리하는지 확인했습니다.



