InfoGrab DocsInfoGrab Docs

Git Large File Storage (LFS)

요약

Git Large File Storage(LFS)는 Git 리포지터리가 대용량 바이너리 파일을 효율적으로 관리하도록 도와주는 오픈 소스 Git 확장 기능입니다. Git LFS를 사용하면 대용량 바이너리 파일을 Git 리포지터리 외부에 저장하고, Git이 관리할 작은 텍스트 기반 포인터만 남길 수 있습니다.

Git Large File Storage(LFS)는 Git 리포지터리가 대용량 바이너리 파일을 효율적으로 관리하도록 도와주는 오픈 소스 Git 확장 기능입니다. Git은 텍스트 파일의 변경을 추적하는 방식과 동일하게 바이너리 파일(오디오, 비디오, 이미지 파일 등)의 변경을 추적할 수 없습니다. 텍스트 기반 파일은 플레인텍스트 diff를 생성할 수 있지만, 바이너리 파일을 변경하면 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 오브젝트 스토리지를 포함한 프로젝트 통계를 재계산하는 job을 대기열에 추가합니다. LFS 오브젝트 스토리지는 리포지터리와 연결된 모든 LFS 오브젝트 크기의 합계입니다.

Git LFS로 관리되는 파일은 파일명 옆에 LFS 배지가 표시됩니다:

[

](/19.1/topics/git/lfs/img/lfs_badge_v16_0.png)

Git LFS 클라이언트는 HTTP Basic 인증을 사용하며 HTTPS를 통해 서버와 통신합니다. 요청을 인증하면 Git LFS 클라이언트는 대용량 파일을 fetch(또는 push)할 위치에 대한 지침을 받습니다.

Git 리포지터리를 더 작게 유지하면 리포지터리 크기 제한을 준수하는 데 도움이 됩니다. 자세한 내용은 GitLab Self-Managed의 리포지터리 크기 제한GitLab.com의 리포지터리 크기 제한을 참조하세요.

Git LFS가 포크와 함께 작동하는 방식 이해#

리포지터리를 포크하면, 포크 시점에 존재했던 업스트림 리포지터리의 기존 LFS 오브젝트가 포크에 포함됩니다. 포크에 새 LFS 오브젝트를 추가하면, 해당 오브젝트는 포크에만 속하며 업스트림 리포지터리에는 속하지 않습니다. 전체 오브젝트 스토리지는 포크에서만 증가합니다.

포크에서 업스트림 프로젝트로 머지 리퀘스트를 생성하고, 해당 머지 리퀘스트에 새 Git LFS 오브젝트가 포함된 경우, GitLab은 머지 후 새 LFS 오브젝트를 업스트림 프로젝트에 연결합니다.

프로젝트에 Git LFS 구성#

GitLab은 GitLab Self-Managed와 GitLab.com 모두에서 기본적으로 Git LFS를 활성화합니다. 서버 설정과 프로젝트별 설정을 모두 제공합니다.

원격 오브젝트 스토리지 설정 등 인스턴스에서 Git LFS를 구성하려면 Git Large File Storage(LFS) 관리를 참조하세요.

특정 프로젝트에 Git LFS를 구성하려면:

리포지터리 로컬 복사본의 루트 디렉터리에서 git lfs install을 실행하세요. 이 명령은 다음을 추가합니다:

리포지터리에 pre-push Git 훅.

  • 개별 파일 및 파일 유형 처리를 추적하는 .gitattributes 파일.

  • Git LFS로 추적할 파일 및 파일 유형을 추가합니다.

프로젝트에서 Git LFS 활성화 또는 비활성화#

Git LFS는 GitLab Self-Managed와 GitLab.com 모두에서 기본적으로 활성화되어 있습니다.

사전 요구 사항:

  • 프로젝트에 대한 Developer, Maintainer, 또는 Owner 권한이 있어야 합니다.

프로젝트에서 Git LFS를 활성화하거나 비활성화하려면:

  • 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  • 왼쪽 사이드바에서 Settings > General을 선택합니다.

  • Visibility, project features, permissions 섹션을 펼칩니다.

  • Git Large File Storage (LFS) 토글을 선택합니다.

  • Save changes를 선택합니다.

파일 추가 및 추적#

Git LFS에 대용량 파일을 추가할 수 있습니다. 이를 통해 Git 리포지터리의 파일을 관리할 수 있습니다. Git LFS로 파일을 추적하면, 해당 파일은 Git에서 텍스트 포인터로 대체되고 원격 서버에 저장됩니다. 자세한 내용은 Git LFS를 참조하세요.

프로젝트에 Git LFS를 구성할 때, 프로젝트 루트 디렉터리에 .gitattributes 파일이 있는지 확인하세요. 루트 수준의 .gitattributes 파일이 없으면, 프로젝트 하위 디렉터리에서 LFS를 올바르게 구성했더라도 UI에 경고가 표시됩니다. 자세한 내용은 LFS 구성 경고 메시지를 참조하세요.

Git LFS를 사용하는 리포지터리 클론#

Git LFS를 사용하는 리포지터리를 클론하면, Git이 LFS로 추적된 파일을 감지하고 HTTPS를 통해 클론합니다. user@hostname.com:group/project.git과 같은 SSH URL로 git clone을 실행하면, HTTPS 인증을 위해 GitLab 자격 증명을 다시 입력해야 합니다.

기본적으로 Git LFS 작업은 Git이 SSH를 통해 리포지터리와 통신하는 경우에도 HTTPS를 통해 수행됩니다. GitLab 17.2에서는 LFS에 대한 순수 SSH 지원이 도입되었습니다. 이 기능을 활성화하는 방법에 대한 자세한 내용은 순수 SSH 전송 프로토콜을 참조하세요.

이미 클론한 리포지터리의 새 LFS 오브젝트를 가져오려면 다음 명령을 실행하세요:

git lfs fetch origin main

기존 리포지터리를 Git LFS로 마이그레이션#

기존 Git 리포지터리를 Git LFS로 마이그레이션하는 방법은 git-lfs-migrate 문서를 참조하세요.

리포지터리 히스토리에서 Git LFS 파일 삭제#

Git LFS에서 파일 추적을 중단하는 것과 파일을 삭제하는 것의 차이점을 이해하는 것이 중요합니다:

  • 추적 중단: 파일은 디스크와 리포지터리 히스토리에 남아 있습니다. 사용자가 과거 브랜치나 태그를 체크아웃하면, 여전히 LFS 버전의 파일이 필요합니다.

  • 삭제: 파일은 제거되지만 리포지터리 히스토리에는 남아 있습니다.

Git LFS로 추적된 파일을 삭제하려면 파일 제거를 참조하세요.

파일의 과거 및 현재의 모든 히스토리를 완전히 삭제하려면 민감한 정보 처리를 참조하세요.

Warning

파일 히스토리 삭제는 Git 히스토리를 다시 작성해야 합니다. 이 작업은 파괴적이며 되돌릴 수 없습니다.

대용량 파일 제거 후 리포지터리 크기 줄이기#

리포지터리 전체 크기를 줄이기 위해 리포지터리 히스토리에서 대용량 파일을 제거해야 하는 경우, 리포지터리 크기 줄이기를 참조하세요.

관련 항목#

Git Large File Storage (LFS)

GitLab v19.1
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

Git Large File Storage(LFS)는 Git 리포지터리가 대용량 바이너리 파일을 효율적으로 관리하도록 도와주는 오픈 소스 Git 확장 기능입니다. Git LFS를 사용하면 대용량 바이너리 파일을 Git 리포지터리 외부에 저장하고, Git이 관리할 작은 텍스트 기반 포인터만 남길 수 있습니다.

Git Large File Storage(LFS)는 Git 리포지터리가 대용량 바이너리 파일을 효율적으로 관리하도록 도와주는 오픈 소스 Git 확장 기능입니다. Git은 텍스트 파일의 변경을 추적하는 방식과 동일하게 바이너리 파일(오디오, 비디오, 이미지 파일 등)의 변경을 추적할 수 없습니다. 텍스트 기반 파일은 플레인텍스트 diff를 생성할 수 있지만, 바이너리 파일을 변경하면 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 오브젝트 스토리지를 포함한 프로젝트 통계를 재계산하는 job을 대기열에 추가합니다. LFS 오브젝트 스토리지는 리포지터리와 연결된 모든 LFS 오브젝트 크기의 합계입니다.

Git LFS로 관리되는 파일은 파일명 옆에 LFS 배지가 표시됩니다:

[

](/19.1/topics/git/lfs/img/lfs_badge_v16_0.png)

Git LFS 클라이언트는 HTTP Basic 인증을 사용하며 HTTPS를 통해 서버와 통신합니다. 요청을 인증하면 Git LFS 클라이언트는 대용량 파일을 fetch(또는 push)할 위치에 대한 지침을 받습니다.

Git 리포지터리를 더 작게 유지하면 리포지터리 크기 제한을 준수하는 데 도움이 됩니다. 자세한 내용은 GitLab Self-Managed의 리포지터리 크기 제한GitLab.com의 리포지터리 크기 제한을 참조하세요.

Git LFS가 포크와 함께 작동하는 방식 이해#

리포지터리를 포크하면, 포크 시점에 존재했던 업스트림 리포지터리의 기존 LFS 오브젝트가 포크에 포함됩니다. 포크에 새 LFS 오브젝트를 추가하면, 해당 오브젝트는 포크에만 속하며 업스트림 리포지터리에는 속하지 않습니다. 전체 오브젝트 스토리지는 포크에서만 증가합니다.

포크에서 업스트림 프로젝트로 머지 리퀘스트를 생성하고, 해당 머지 리퀘스트에 새 Git LFS 오브젝트가 포함된 경우, GitLab은 머지 후 새 LFS 오브젝트를 업스트림 프로젝트에 연결합니다.

프로젝트에 Git LFS 구성#

GitLab은 GitLab Self-Managed와 GitLab.com 모두에서 기본적으로 Git LFS를 활성화합니다. 서버 설정과 프로젝트별 설정을 모두 제공합니다.

원격 오브젝트 스토리지 설정 등 인스턴스에서 Git LFS를 구성하려면 Git Large File Storage(LFS) 관리를 참조하세요.

특정 프로젝트에 Git LFS를 구성하려면:

리포지터리 로컬 복사본의 루트 디렉터리에서 git lfs install을 실행하세요. 이 명령은 다음을 추가합니다:

리포지터리에 pre-push Git 훅.

  • 개별 파일 및 파일 유형 처리를 추적하는 .gitattributes 파일.

  • Git LFS로 추적할 파일 및 파일 유형을 추가합니다.

프로젝트에서 Git LFS 활성화 또는 비활성화#

Git LFS는 GitLab Self-Managed와 GitLab.com 모두에서 기본적으로 활성화되어 있습니다.

사전 요구 사항:

  • 프로젝트에 대한 Developer, Maintainer, 또는 Owner 권한이 있어야 합니다.

프로젝트에서 Git LFS를 활성화하거나 비활성화하려면:

  • 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  • 왼쪽 사이드바에서 Settings > General을 선택합니다.

  • Visibility, project features, permissions 섹션을 펼칩니다.

  • Git Large File Storage (LFS) 토글을 선택합니다.

  • Save changes를 선택합니다.

파일 추가 및 추적#

Git LFS에 대용량 파일을 추가할 수 있습니다. 이를 통해 Git 리포지터리의 파일을 관리할 수 있습니다. Git LFS로 파일을 추적하면, 해당 파일은 Git에서 텍스트 포인터로 대체되고 원격 서버에 저장됩니다. 자세한 내용은 Git LFS를 참조하세요.

프로젝트에 Git LFS를 구성할 때, 프로젝트 루트 디렉터리에 .gitattributes 파일이 있는지 확인하세요. 루트 수준의 .gitattributes 파일이 없으면, 프로젝트 하위 디렉터리에서 LFS를 올바르게 구성했더라도 UI에 경고가 표시됩니다. 자세한 내용은 LFS 구성 경고 메시지를 참조하세요.

Git LFS를 사용하는 리포지터리 클론#

Git LFS를 사용하는 리포지터리를 클론하면, Git이 LFS로 추적된 파일을 감지하고 HTTPS를 통해 클론합니다. user@hostname.com:group/project.git과 같은 SSH URL로 git clone을 실행하면, HTTPS 인증을 위해 GitLab 자격 증명을 다시 입력해야 합니다.

기본적으로 Git LFS 작업은 Git이 SSH를 통해 리포지터리와 통신하는 경우에도 HTTPS를 통해 수행됩니다. GitLab 17.2에서는 LFS에 대한 순수 SSH 지원이 도입되었습니다. 이 기능을 활성화하는 방법에 대한 자세한 내용은 순수 SSH 전송 프로토콜을 참조하세요.

이미 클론한 리포지터리의 새 LFS 오브젝트를 가져오려면 다음 명령을 실행하세요:

git lfs fetch origin main

기존 리포지터리를 Git LFS로 마이그레이션#

기존 Git 리포지터리를 Git LFS로 마이그레이션하는 방법은 git-lfs-migrate 문서를 참조하세요.

리포지터리 히스토리에서 Git LFS 파일 삭제#

Git LFS에서 파일 추적을 중단하는 것과 파일을 삭제하는 것의 차이점을 이해하는 것이 중요합니다:

  • 추적 중단: 파일은 디스크와 리포지터리 히스토리에 남아 있습니다. 사용자가 과거 브랜치나 태그를 체크아웃하면, 여전히 LFS 버전의 파일이 필요합니다.

  • 삭제: 파일은 제거되지만 리포지터리 히스토리에는 남아 있습니다.

Git LFS로 추적된 파일을 삭제하려면 파일 제거를 참조하세요.

파일의 과거 및 현재의 모든 히스토리를 완전히 삭제하려면 민감한 정보 처리를 참조하세요.

Warning

파일 히스토리 삭제는 Git 히스토리를 다시 작성해야 합니다. 이 작업은 파괴적이며 되돌릴 수 없습니다.

대용량 파일 제거 후 리포지터리 크기 줄이기#

리포지터리 전체 크기를 줄이기 위해 리포지터리 히스토리에서 대용량 파일을 제거해야 하는 경우, 리포지터리 크기 줄이기를 참조하세요.

관련 항목#