- Git LFS가 포크와 어떻게 작동하는지 이해하기
- 프로젝트에 대해 Git LFS 구성하기
- Git LFS로 파일 추가하기
- Git LFS로 파일 추적 중지하기
- 프로젝트에 대한 Git LFS 활성화 또는 비활성화
- Git LFS를 사용하는 리포지토리 복제하기
- 기존 리포지토리를 Git LFS로 마이그레이션
- 리포지토리 기록에서 Git LFS 파일 삭제
- 큰 파일 제거 후 리포지토리 크기 줄이기
- 관련 주제
Git 대용량 파일 저장소 (LFS)
Git 대용량 파일 저장소 (LFS)는 Git 리포지토리가 대형 바이너리 파일을 효율적으로 관리할 수 있도록 돕는 오픈 소스 Git 확장입니다.
Git은 텍스트 파일의 변경 사항을 추적하는 것과 동일한 방식으로 바이너리 파일(오디오, 비디오 또는 이미지 파일 등)의 변경 사항을 추적할 수 없습니다.
텍스트 기반 파일은 일반 텍스트 차이를 생성할 수 있지만, 바이너리 파일의 변경은 Git이 리포지토리에서 파일을 완전히 교체해야 합니다.
대형 파일을 반복적으로 변경하면 리포지토리의 크기가 증가합니다.
시간이 지남에 따라 이러한 크기 증가로 인해 clone
, fetch
, 또는 pull
과 같은 일반 Git 작업이 느려질 수 있습니다.
Git LFS를 사용하여 대형 바이너리 파일을 Git 리포지토리 외부에 저장하고, Git이 관리할 수 있도록 작은 텍스트 기반 포인터만 남깁니다.
Git LFS를 사용하여 파일을 리포지토리에 추가할 때, GitLab은:
-
파일을 Git 리포지토리 대신 프로젝트에 구성된 객체 저장소에 추가합니다.
-
대형 파일 대신 Git 리포지토리에 포인터를 추가합니다. 포인터는 파일에 대한 정보를 포함하고 있으며, 이는 다음과 같습니다:
version https://git-lfs.github.com/spec/v1 oid sha256:lpca0iva5kpz9wva5rgsqsicxrxrkbjr0bh4sy6rz08g2c4tyc441rto5j5bctit size 804
- Version - 사용 중인 Git LFS 사양의 버전
-
OID - 사용된 해싱 방법 및
{hash-method}:{hash}
형태의 고유 객체 ID. - Size - 파일 크기(바이트 단위).
-
프로젝트의 통계(저장소 크기 및 LFS 객체 저장소 포함)를 재계산하기 위해 작업을 대기열에 추가합니다. 귀하의 LFS 객체 저장소는 리포지토리에 연결된 모든 LFS 객체의 크기의 합입니다.
Git LFS로 관리되는 파일은 파일 이름 옆에 LFS 배지를 표시합니다:
Git LFS 클라이언트는 HTTP 기본 인증을 사용하고, HTTPS를 통해 서버와 통신합니다. 요청을 인증한 후, Git LFS 클라이언트는 대형 파일을 가져오거나 푸시할 위치에 대한 지침을 받습니다.
귀하의 Git 리포지토리는 더 작게 유지되며, 이는 리포지토리 크기 제한을 준수하는 데 도움이 됩니다.
자세한 내용은 리포지토리 크기 제한에 대해 알아보세요.
Git LFS가 포크와 어떻게 작동하는지 이해하기
리포지토리를 포크할 때, 귀하의 포크에는 포크 시점에 존재하던 상위 리포지토리의 기존 LFS 객체가 포함됩니다.
포크에 새 LFS 객체를 추가하면, 해당 객체는 오직 귀하의 포크에만 속하고, 상위 리포지토리에는 속하지 않습니다.
총 객체 저장소는 귀하의 포크에 대해서만 증가합니다.
귀하의 포크에서 상위 프로젝트로 병합 요청을 생성할 때, 병합 요청에 새로운 Git LFS 객체가 포함되면, GitLab은 병합 후 새로운 LFS 객체를 상위 프로젝트와 연결합니다.
프로젝트에 대해 Git LFS 구성하기
Offering: Self-managed, GitLab Dedicated
GitLab은 기본적으로 self-managed 인스턴스와 GitLab.com 모두에 대해 Git LFS를 활성화합니다.
서버 설정과 프로젝트별 설정을 모두 제공합니다.
-
귀하의 인스턴스에서 Git LFS를 구성하려면, 원격 객체 저장소 설정 등은 GitLab Git 대용량 파일 저장소 (LFS) 관리를 참조하세요.
-
특정 프로젝트에 대해 Git LFS를 구성하려면:
- 리포지토리의 로컬 복사본의 루트 디렉터리에서
git lfs install
을 실행합니다. 이 명령은 다음을 추가합니다:- 리포지토리에 대한 사전 푸시 Git 훅.
- 개별 파일 및 파일 유형 처리를 추적하기 위한
.gitattributes
파일.
- Git LFS로 추적할 파일 및 파일 유형을 추가합니다.
- 리포지토리의 로컬 복사본의 루트 디렉터리에서
Git LFS로 파일 추가하기
선행 조건:
- 운영 체제에 맞는 Git LFS용 CLI 확장을 다운로드하여 설치했습니다.
- 귀하의 프로젝트는 Git LFS 사용을 위해 구성되었습니다.
대형 파일을 Git 저장소에 추가하고 Git LFS로 즉시 추적하려면:
-
특정 유형의 모든 파일을 단일 파일이 아닌 Git LFS로 추적하려면 아래 명령을 실행하세요.
iso
를 원하는 파일 유형으로 바꾸세요:git lfs track "*.iso"
이 명령은 모든 ISO 파일을 Git LFS로 처리하기 위한 지침이 포함된
.gitattributes
파일을 생성합니다..gitattributes
파일의 내용은 다음과 같습니다:*.iso filter=lfs -text
-
해당 유형의 파일(
.iso
)을 저장소에 추가합니다. -
Git에게
.gitattributes
파일과.iso
파일의 변경 사항을 추적하도록 지시합니다:git add .
-
두 파일을 모두 추가했는지 확인하려면
git status
를 실행합니다..gitattributes
파일이 커밋에 포함되지 않으면 저장소를 클론하는 사용자는 필요한 파일을 얻지 못합니다. -
두 파일을 로컬 저장소에 커밋합니다:
git commit -am "Add an ISO file and .gitattributes"
-
변경 사항을 다시 업스트림으로 푸시합니다.
main
을 브랜치 이름으로 교체합니다:git push origin main
변경하고 있는 파일이
.gitignore
파일에 나열되어 있지 않은지 확인하세요. 이 파일(또는 파일 유형)이.gitignore
파일에 있다면, Git은 변경 사항을 로컬로 커밋하지만, 이를 업스트림 저장소로 푸시하지 않습니다. -
병합 요청을 생성합니다.
Git LFS에 파일 유형 추가하기
새로운 파일 유형을 Git LFS 추적으로 추가할 때, 이 유형의 기존 파일은 변환되지 않습니다. 추적을 시작한 후에 추가된 이 유형의 파일은 Git LFS에 추가됩니다. 이 유형의 기존 파일을 Git LFS로 변환하려면 git lfs migrate
를 사용하세요.
선행 조건:
- 운영 체제에 맞는 Git LFS용 CLI 확장을 다운로드하여 설치했습니다.
- 귀하의 프로젝트는 Git LFS 사용을 위해 구성되었습니다.
Git LFS에서 파일 유형을 추적하기 시작하려면:
-
이 파일 유형이 프로젝트의
.gitignore
파일에 나열되지 않았는지 확인하세요. 이 파일 유형이.gitignore
파일에 있다면, Git은 변경 사항을 로컬로 커밋하지만, 이를 업스트림 저장소로 푸시하지 않습니다. -
Git LFS로 추적할 파일 유형을 결정합니다. 각 파일 유형에 대해 다음 명령을 실행하며
iso
를 원하는 파일 유형으로 바꾸세요:git lfs track "*.iso"
-
Git에게
.gitattributes
파일의 변경 사항을 추적하도록 지시합니다. 원하는 파일 유형으로iso
를 교체하여 파일을 로컬 저장소에 커밋합니다:git add . git commit -am "Use Git LFS for files of type .iso"
-
변경 사항을 다시 업스트림으로 푸시합니다.
filetype
을 브랜치 이름으로 교체합니다:git push origin filetype
Git LFS로 파일 추적 중지하기
Git LFS로 파일 추적을 중지하면, 파일이 사라지지 않고 디스크에 남아있습니다. 이는 해당 파일이 리포지토리의 역사에 속하기 때문입니다. 그 이유를 이해하려면 리포지토리 역사에서 Git LFS 파일 삭제를 참조하세요.
사전 요구 사항:
-
운영 체제에 맞는 Git LFS용 CLI 확장을 다운로드하여 설치했습니다.
-
리포지토리의 루트 디렉토리에서
git lfs install
을 실행하여 Git LFS 프리 푸시 훅을 설치했습니다.
Git LFS로 파일 추적을 중지하려면:
-
git lfs untrack
명령을 실행하고 파일 경로를 제공합니다:git lfs untrack doc/example.iso
-
touch
명령을 사용하여 파일을 표준 파일로 변환합니다:touch doc/example.iso
-
변경 사항을 파일에 대해 Git에 알립니다:
git add .
-
변경 사항을 커밋하고 푸시합니다.
-
머지 요청을 생성하고 리뷰를 요청합니다.
-
필요한 승인을 받은 후, 요청을 대상 브랜치에 병합합니다.
Git LFS로 추적되는 객체(example.iso
)를 삭제했으나 git lfs untrack
명령을 사용하지 않으면, example.iso
는 git status
에서 modified
로 표시됩니다.
특정 유형의 모든 파일 추적 중지하기
사전 요구 사항:
-
운영 체제에 맞는 Git LFS용 CLI 확장을 다운로드하여 설치했습니다.
-
리포지토리의 루트 디렉토리에서
git lfs install
을 실행하여 Git LFS 프리 푸시 훅을 설치했습니다.
Git LFS에서 특정 유형의 모든 파일 추적을 중지하려면:
-
git lfs untrack
명령을 실행하고 추적 중지를 원하는 파일 유형을 제공합니다:git lfs untrack "*.iso"
-
touch
명령을 사용하여 파일들을 표준 파일로 변환합니다:touch *.iso
-
파일 변경 사항을 Git에 알립니다:
git add .
-
변경 사항을 커밋하고 푸시합니다.
-
머지 요청을 생성하고 리뷰를 요청합니다.
-
필요한 승인을 받은 후, 요청을 대상 브랜치에 병합합니다.
프로젝트에 대한 Git LFS 활성화 또는 비활성화
Git LFS는 자기 관리 인스턴스와 GitLab.com 모두에서 기본적으로 활성화되어 있습니다.
사전 요구 사항:
- 프로젝트에 대해 최소한 개발자 역할을 가져야 합니다.
프로젝트 수준에서 Git LFS를 활성화 또는 비활성화하려면:
-
왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
Settings > General을 선택합니다.
-
Visibility, project features, permissions 섹션을 확장합니다.
-
Git Large File Storage (LFS) 토글을 선택합니다.
-
Save changes를 선택합니다.
Git LFS를 사용하는 리포지토리 복제하기
Git LFS를 사용하는 리포지토리를 복제할 때, Git은 LFS로 추적되는 파일을 감지하고 HTTPS를 통해 복제합니다. SSH URL(user@hostname.com:group/project.git
)로 git clone
을 실행하면, HTTPS 인증을 위해 GitLab 자격 증명을 다시 입력해야 합니다.
기본적으로 Git LFS 작업은 HTTPS를 통해 수행되며, Git이 리포지토리와 SSH를 통해 통신할 때도 마찬가지입니다. GitLab 17.2에서는 LFS를 위한 순수 SSH 지원이 도입되었습니다. 이 기능을 활성화하는 방법은 순수 SSH 전송 프로토콜을 참조하세요.
이미 복제한 리포지토리의 새 LFS 객체를 가져오려면 다음 명령을 실행합니다:
git lfs fetch origin main
기존 리포지토리를 Git LFS로 마이그레이션
git-lfs-migrate
문서를 읽고 Git LFS로 기존 Git 리포지토리를 마이그레이션하는 방법을 알아보세요.
리포지토리 기록에서 Git LFS 파일 삭제
Git LFS에서 파일의 추적 해제와 파일 삭제 사이의 차이를 이해하는 것이 중요합니다:
-
Untrack: 파일은 디스크와 리포지토리 기록에 남아 있습니다.
사용자가 과거 브랜치나 태그를 체크아웃하면 여전히 파일의 LFS 버전이 필요합니다. -
Delete: 파일은 제거되지만 리포지토리 기록에는 남아 있습니다.
Git LFS로 추적된 파일을 삭제하려면 파일 삭제를 참조하세요.
파일의 모든 기록을 완전히 지우려면,
커밋에서 민감한 정보 삭제를 참조하세요.
경고:
파일 기록을 지우려면 Git 기록을 다시 작성해야 합니다. 이 작업은 파괴적이며 되돌릴 수 없습니다.
큰 파일 제거 후 리포지토리 크기 줄이기
리포지토리의 역사에서 큰 파일을 제거하여 리포지토리의 총 크기를 줄이려면,
리포지토리 크기 줄이기를 참조하세요.
관련 주제
- Git LFS를 사용하여 독점 파일 잠금을 설정하세요.
- 블로그 게시물: Git LFS 시작하기
- Git LFS 개발자 정보
- 자가 관리 인스턴스를 위한 GitLab Git 대용량 파일 저장소(LFS) 관리
- Git LFS 문제 해결
.gitattributes
파일