Git 리포지토리에서 대용량 파일 작업

Azure DevOps 서비스 | Azure DevOps Server | Azure DevOps Server 2022

소스 파일에는 Git을, 종속성에는 Azure Artifacts를, 자주 변경되는 대용량 이진 파일에는 Git LFS를 사용합니다. 리포지토리에 이미 큰 파일이 포함되어 있는 경우 이 문서는 Git에서 유지할 항목, 이동할 항목 및 기록에서 이진 파일을 제거할 시기를 결정하는 데 도움이 됩니다.

각 파일을 저장할 위치 결정

리포지토리에 이미 있는 파일로 수행할 작업을 결정하는 경우 다음을 시작합니다.

  • Git에서 원본 파일, 스크립트 및 텍스트 파일을 유지합니다.
  • 종속성 및 재사용 가능한 패키지를 Azure Artifacts 패키지 관리로 이동합니다.
  • 자주 변경되고 잘 확산되지 않는 큰 이진 파일에 Git LFS를 사용합니다.
  • 이미 체크 인되어 있고 더 이상 리포지토리에 속하지 않는 경우 리포지토리 기록에서 큰 이진 파일을 제거합니다. 리포지토리에서 대용량 파일 제거를 참조하세요.

리포지토리가 이미 큰 경우 저장소 접근 방식을 선택하기 전에 리포지토리 및 푸시 제한을 검토합니다. 큰 리포지토리에 영향을 주는 파일, 푸시 및 경로 제한에 대한 Git 제한을 참조하세요.

Git, 패키지 관리 및 Git LFS에 적합한 스토리지 옵션 선택

이 표를 사용하여 가장 적합한 것을 선택할 수 있습니다.

파일 형식 또는 시나리오 사용하세요
소스 코드, 스크립트 및 텍스트 파일 Git
종속성 및 재사용 가능한 패키지 Azure Artifacts 패키지 관리
자주 변경되는 큰 이진 파일 Git LFS
Azure DevOps Server Git LFS 및 Kerberos 이 문서의 Kerberos 지침 및 마지막에 연결된 문서를 참조하세요.

Git은 텍스트 기반 원본 파일 및 읽기 가능한 작은 증분으로 변경되는 기타 콘텐츠에 가장 적합합니다.

큰 이진 파일은 다음과 같은 이유로 일반 Git 스토리지에 적합하지 않습니다.

  • Git은 소스 코드, 스크립트 및 텍스트 파일에 대한 버전 차이를 효율적으로 저장합니다.
  • 버전 간에 완전히 변경되는 대용량 파일은 잘 압축되거나 확산되지 않습니다.
  • 큰 이진 파일은 클론, 페치, 분기 및 체크 아웃 시간을 증가합니다.

리포지토리에 이진 파일과 같이 변환할 수 없는 큰 파일을 추가하는 경우 변경 내용을 커밋할 때마다 해당 파일의 전체 복사본을 리포지토리에 보관합니다. 이러한 파일의 많은 버전이 리포지토리에 있는 경우 코드를 체크 아웃, 분기, 페치 및 복제하는 시간이 크게 증가합니다.

Git에 속하는 파일은 무엇인가요?

파일 형식 및 변경 빈도에 맞는 가장 간단한 옵션을 사용합니다.

종속성이 아닌 Git에 소스 코드 유지

팀에서 직접 편집하는 파일에 Git을 사용합니다. 종속성은 리포지토리에 두지 말고 패키지 관리를 통해 제공하세요.

  • Git에 원본 파일을 넣습니다.
  • DLL, 라이브러리 파일 및 기타 종속성을 리포지토리 외부에 저장합니다.
  • 패키지 관리를 사용하여 종속성을 버전 지정하고 배포합니다.

패키지 관리는 종속성을 번들로 묶고 패키지를 배포할 때 시스템에 파일을 설치합니다. 패키지는 한 환경에서 테스트된 코드가 동일한 설치된 패키지가 있는 한 다른 환경에서 동일하게 실행되도록 버전이 지정됩니다.

빌드 출력 커밋 안 함

빌드 출력 또는 테스트 아티팩트가 아닌 원본에 Git을 사용합니다.

  • 이진 파일, 로그, 추적 출력 또는 진단 데이터를 커밋하지 마세요.
  • 작업 항목 추적 또는 팀 파일 공유를 통해 로그 및 추적 정보를 공유합니다.

Git에 작은 이진 파일 저장

자주 변경되지 않는 경우에만 작은 이진 파일에 Git을 사용합니다.

  • 좋은 예로는 웹 이미지, 아이콘 및 기타 작은 아트 자산이 있습니다.
  • 이러한 파일을 Git에 유지하면 팀의 일관된 워크플로가 유지됩니다.

중요합니다

작은 이진 파일조차도 자주 업데이트되는 경우 문제가 발생할 수 있습니다. 예를 들어 100KB 이진 파일에 대한 100개의 변경 내용은 1MB 이진 파일에 대한 10개의 변경 내용만큼의 스토리지를 사용합니다. 업데이트 빈도로 인해 이진 파일이 작을수록 큰 이진 파일보다 분기 성능이 더 느려집니다.

자주 업데이트되는 대규모 바이너리 자산의 사용을 피하세요.

이러한 파일은 종종 버전 간에 변경되고 일반적으로 이미 압축되어 있으므로 Git에서 큰 이진 파일을 효율적으로 저장할 수 없습니다.

  • Git은 각 버전의 전체 콘텐츠를 저장합니다.
  • 리포지토리 크기는 시간이 지남에 따라 증가합니다.
  • 복제, 분기, 페치 및 체크 아웃 작업의 속도가 느려집니다.

Git은 각 버전의 전체 내용을 저장해야 하므로 델타화와 압축은 큰 도움이 되지 않습니다. 이러한 파일이 누적되면 리포지토리가 커지고 분기 속도가 느려지고 복제 시간이 증가합니다.

큰 이진 소스 파일에 대한 전략

  • 압축된 보관 파일을 커밋하지 마세요. 대신 데이터 압축을 풀고 확산 가능한 원본을 커밋합니다.
  • 컴파일된 코드 및 기타 이진 종속성을 커밋하지 마세요. 직접 빌드하거나 패키지 관리 시스템을 통해 제공하세요.
  • 구성 및 기타 구조화된 데이터를 JSON과 같은 확산 가능한 일반 텍스트 형식으로 저장합니다.

Git LFS(대규모 파일 스토리지)란?

버전 간에 자주 변경되고 크게 다른 소스 파일에 는 LFS(Git Large File Storage) 를 사용합니다.

Git LFS:

  • 전체 파일 내용 대신 큰 파일에 대한 포인터를 리포지토리에 저장합니다.
  • 이진 콘텐츠를 별도의 원격 스토리지에 저장합니다.
  • 분기를 복제하거나 전환할 때 올바른 버전을 다운로드합니다.
  • 모든 클론 및 분기 변경을 통해 전체 파일 콘텐츠를 이동하지 않고도 대용량 이진 파일에 대해 일반적인 Git 워크플로를 유지합니다.

Git LFS의 장점

Git LFS는 주 리포지토리에서 큰 파일 콘텐츠를 이동하는 동안 Git 워크플로를 유지합니다.

  • 팀은 동일한 엔드투엔드 Git 워크플로를 계속 사용할 수 있습니다.
  • 대용량 파일은 리포지토리를 관리하기 쉽게 유지하는 데 도움이 되는 주 리포지토리 기록에서 벗어나지 않습니다.
  • 파일 잠금은 비디오, 소리 및 게임 맵과 같은 미해지지 않는 대규모 자산에 대한 공유 작업을 지원합니다.

Azure DevOps Services는 Git LFS를 완벽하게 지원하고 무료로 제공합니다. LFS를 사용하려면 Git LFS 클라이언트를 설치하고, LFS에 저장하려는 파일에 대한 추적을 구성한 다음, 변경 내용을 Azure Repos 푸시합니다.

Azure DevOps Server 및 Kerberos 관련 지침은 Kerberos 및 Git LFS를 참조하세요.

Git LFS 제한 사항

Git LFS에는 여전히 미리 고려해야 할 몇 가지 상충점이 있습니다:

  • 모든 Git 클라이언트는 Git LFS 클라이언트를 설치하고 추적 구성을 이해해야 합니다.
  • 클라이언트가 올바르게 설치되거나 구성되지 않은 경우 이진 파일 대신 포인터 데이터를 복제합니다.
  • Git은 다른 버전의 이진 파일을 병합할 수 없으므로 팀원은 변경 내용을 조정해야 합니다.
  • Git LFS는 파일 잠금을 제공하지만 사용자는 작업을 시작하기 전에 최신 복사본을 가져와야 합니다.
  • Azure Repos Git LFS 추적 파일이 있는 리포지토리에 대해 SSH(Secure Shell)를 지원하지 않습니다.
  • 이진 파일을 웹 인터페이스로 끌면 LFS 포인터가 아닌 리포지토리에 이진 파일이 커밋됩니다.
  • 사용 가능한 공간, 현재 워크로드 및 1시간 업로드 제한으로 큰 업로드를 제한할 수 있습니다.

Git LFS 파일 형식

Git LFS 추적 파일의 리포지토리에 쓰는 파일에는 각 줄에 키/값 쌍이 있는 몇 줄이 있습니다.

version https://git-lfs.github.com/spec/v1
oid a747cfbbef63fc0a3f5ffca332ae486ee7bf77c1d1b9b2de02e261ef97d085fe
size 4923023

비고

Azure DevOps Server 및 Kerberos 계획

Azure DevOps Server와 Windows 인증을 사용하는 경우 Git LFS 사용 시 Kerberos를 고려해야 합니다. Git LFS 2.10.0 이상에서는 Kerberos 인증을 지원합니다.

이전 Azure DevOps Server 지침을 업데이트해야 하는 경우 Kerberos 및 Git LFS 및 연결된 Azure DevOps Server 인증 지침부터 시작합니다.