Git LFS 문제 해결

Git LFS를 사용할 때 다음과 같은 문제에 직면할 수 있습니다.

  • Git LFS의 원래 v1 API는 지원되지 않습니다.

  • Git LFS 요청은 HTTPS 자격 증명을 사용하므로 Git 자격 증명 저장소를 사용해야 합니다.

  • 그룹 위키는 Git LFS를 지원하지 않습니다.

오류: 리포지토리 또는 개체를 찾을 수 없음

이 오류는 몇 가지 이유로 발생할 수 있습니다.

  • 특정 LFS 개체에 대한 권한이 없습니다. 프로젝트에 푸시할 수 있는 권한이나 프로젝트에서 가져올 수 있는 권한이 있는지 확인하십시오.

  • 프로젝트에서 LFS 개체에 액세스할 수 없습니다. 푸시(또는 가져오기)하려는 LFS 개체가 더 이상 프로젝트에 사용할 수 없습니다. 대부분의 경우, 개체는 서버에서 제거되었습니다.

  • 로컬 Git 리포지토리가 더 이상 지원되지 않는 Git LFS API 버전을 사용하고 있습니다. 로컬 Git LFS 복사본을 업데이트하고 다시 시도하십시오.

<url>에 대한 잘못된 상태: 501

Git LFS는 실패 내용을 로그 파일에 기록합니다. 이 로그 파일을 보려면:

  1. 터미널 창에서 프로젝트 디렉토리로 이동합니다.

  2. 최근 로그 파일을 보려면 다음 명령을 실행합니다:

    git lfs logs last
    

이 문제는 501 오류를 유발할 수 있습니다:

  • Git LFS가 프로젝트 설정에서 활성화되어 있지 않습니다. 프로젝트 설정을 확인하고 Git LFS를 활성화하십시오.

  • GitLab 서버에서 Git LFS 지원이 활성화되어 있지 않습니다. GitLab 관리자에게 Git LFS가 서버에서 활성화되어 있지 않은 이유를 문의하십시오. Git LFS 지원 활성화 방법에 대한 지침은 LFS 관리 문서를 참조하십시오.

  • Git LFS 클라이언트 버전이 GitLab 서버에서 지원되지 않습니다. 다음을 수행해야 합니다:

    1. git lfs version으로 Git LFS 버전을 확인합니다.

    2. git lfs -l로 프로젝트의 Git 구성을 확인하여 더 이상 지원되지 않는 API의 흔적을 찾습니다. 구성에서 batch = false로 설정되어 있으면 해당 줄을 제거한 후 Git LFS 클라이언트를 업데이트하십시오. GitLab은 1.0.1 이상 버전만 지원합니다.

개체를 푸시할 때 항상 자격 증명이 필요합니다

Git LFS는마다 HTTP 기본 인증을 사용하여 사용자를 인증하므로 사용자 HTTPS 자격 증명이 필요합니다. 기본적으로 Git은 사용하는 각 리포지토리에 대해 자격 증명을 기억하는 것을 지원합니다. 자세한 내용은 공식 Git 문서를 참조하십시오.

예를 들어, Git에 개체를 푸시할 것으로 예상되는 시간 동안 비밀번호를 기억하도록 지시할 수 있습니다. 이 예시는 자격 증명을 한 시간(3600초) 동안 기억하며, 한 시간이 지나면 다시 인증해야 합니다:

git config --global credential.helper 'cache --timeout=3600'

자격 증명을 저장하고 암호화하는 방법은 다음과 같습니다:

사용자 자격 증명을 저장하는 방법에 대해 자세히 알아보려면 Git Credential Storage 문서를 참조하십시오.

LFS 개체가 푸시 중 누락됨

GitLab은 LFS 포인터를 감지하기 위해 푸시 시 파일을 검사합니다. LFS 포인터가 감지되면,

GitLab은 해당 파일이 LFS에 이미 존재하는지 확인하려고 시도합니다. 별도의

서버에서 Git LFS를 사용하는 경우, 다음 문제에 직면할 수 있습니다:

  1. 로컬에 Git LFS가 설치되어 있는지 확인합니다.

  2. git lfs push --all로 수동 푸시를 고려합니다.

GitLab 외부에 Git LFS 파일을 저장하는 경우,

프로젝트에 대한 Git LFS 사용 또는 사용 안함을 설정할 수 있습니다.

LFS 개체 외부 호스팅

사용자 지정 LFS URL을 설정하여 LFS 개체를 외부에 호스팅할 수 있습니다:

git config -f .lfsconfig lfs.url https://example.com/<project>.git/info/lfs

Nexus Repository와 같은 기기에 LFS 데이터를 저장하는 경우 이 작업을 수행할 수 있습니다.

외부 LFS 저장소를 사용하는 경우, GitLab은 LFS 개체를 검증할 수 없습니다.

GitLab LFS 지원이 활성화된 경우 푸시는 실패합니다.

푸시 실패를 방지하려면, 프로젝트 설정에서 Git LFS 지원을 비활성화할 수 있습니다. 그러나 이 방법은

바람직하지 않을 수 있으며, 다음과 같은 GitLab LFS 기능도 비활성화됩니다:

  • LFS 개체 검증.
  • LFS에 대한 GitLab UI 통합.

LFS 개체 푸시 시 I/O 시간 초과

네트워크 상태가 불안정한 경우, Git LFS 클라이언트가 파일 업로드를 시도할 때 시간 초과가 발생할 수 있습니다.

다음과 같은 오류 메시지를 볼 수 있습니다:

LFS: Put "http://example.com/root/project.git/gitlab-lfs/objects/<OBJECT-ID>/15":
read tcp your-instance-ip:54544->your-instance-ip:443: i/o timeout
error: failed to push some refs to 'ssh://example.com:2222/root/project.git'

이 문제를 해결하려면, 클라이언트 활동 시간 초과 값을 더 높게 설정하십시오. 예를 들어,

시간 초과를 60초로 설정하려면:

git config lfs.activitytimeout 60

포인터여야 할 n개의 파일을 발견했지만 그렇지 않음

이 오류는 저장소가 Git LFS로 파일을 추적해야 하지만 추적하지 않음을 나타냅니다.

문제 326342, GitLab 16.10에서 수정된 이 문제의 한 원인입니다.

문제를 해결하려면, 영향을 받는 파일을 마이그레이션하고 저장소에 푸시하십시오:

  1. 파일을 LFS로 마이그레이션합니다:

    git lfs migrate import --yes --no-rewrite "<your-file>"
    
  2. 저장소에 다시 푸시합니다:

    git push
    
  3. 선택 사항. .git 폴더를 정리합니다:

    git reflog expire --expire-unreachable=now --all
    git gc --prune=now