Git LFS 문제 해결
Git LFS를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
n
개의 파일을 포인터로 추적해야 했지만 그렇지 않은 경우에 대한 오류
이 오류는 파일이 LFS에 의해 추적되어야 하지만 리포지터리가 LFS로 추적하고 있지 않을 때 발생합니다. 이 문제의 한 가지 가능한 이유는 다음과 같습니다: 웹 인터페이스를 통해 업로드된 파일이 LFS로 추적되지 않음
이 문제를 해결하려면 영향을 받는 파일(또는 파일들)을 마이그레이션하고 리포지터리로 푸시합니다:
-
파일을 LFS로 마이그레이션합니다:
git lfs migrate import --yes --no-rewrite "<파일명>"
-
리포지터리로 푸시합니다:
git push
-
옵션.
.git
폴더를 정리합니다:git reflog expire --expire-unreachable=now --all git gc --prune=now
오류: 리포지터리 또는 객체를 찾을 수 없음
이 오류는 몇 가지 이유로 발생할 수 있으며, 그 중 일부는 다음과 같습니다:
- 특정 LFS 객체에 액세스할 수 있는 권한이 없는 경우
프로젝트로 푸시하거나 프로젝트에서 가져올 수 있는 권한을 확인합니다.
- 프로젝트가 LFS 객체에 액세스할 수 없는 경우
푸시하거나 프로젝트에서 가져오려는 LFS 객체가 프로젝트에서 더 이상 사용할 수 없습니다. 해당 객체가 서버에서 제거되었을 수 있습니다.
- 로컬 Git 리포지터리가 사라진 LFS API를 사용 중인 경우
<url>
에 대한 유효하지 않은 상태: 501
Git LFS는 실패 사항을 로그 파일에 기록합니다. 프로젝트 디렉터리에서 이 로그 파일을 보려면:
git lfs logs last
error 501
상태가 표시되면 다음과 같은 이유 때문입니다:
-
프로젝트 설정에서 Git LFS가 활성화되어 있지 않습니다. 프로젝트 설정을 확인하고 Git LFS를 활성화하세요.
-
GitLab 서버에서 Git LFS 지원이 활성화되어 있지 않습니다. 서버에서 Git LFS가 활성화되어 있지 않은 이유에 대해 GitLab 관리자에게 문의하세요. LFS 지원을 활성화하는 방법에 대한 지침은 LFS 관리 문서에서 확인할 수 있습니다.
-
GitLab 서버에서 지원되지 않는 Git LFS 클라이언트 버전을 사용 중입니다.
git lfs version
으로 Git LFS 버전을 확인하세요. 프로젝트의 Git 구성을 확인하여 사용 중지된 API의 흔적이 있는지git lfs -l
로 확인하세요. 구성에서batch = false
로 설정되어 있다면 해당 라인을 제거하고 Git LFS 클라이언트를 업데이트해 보세요. 1.0.1 버전 이상만 지원됩니다.
getsockopt: 연결 거부
프로젝트로 LFS 객체를 푸시하려고 시도하면 다음과 유사한 오류가 발생한다면, LFS 클라이언트가 HTTPS를 통해 GitLab에 액세스하려고 시도하지만 실제로는 GitLab이 HTTP로 제공되고 있어서 발생한 것입니다:
Post <URL>/info/lfs/objects/batch: dial tcp IP: getsockopt: connection refused
이 동작은 Git LFS가 Git 구성에 lfsurl
이 설정되지 않은 경우 기본적으로 HTTPS 연결을 사용하기 때문에 발생합니다.
이러한 문제를 방지하려면 프로젝트 Git 구성에서 LFS URL을 설정하세요:
git config --add lfs.url "http://gitlab.example.com/group/my-sample-project.git/info/lfs"
객체를 푸시할 때 항상 자격 증명이 필요함
Git LFS는 모든 객체에 대해 모든 푸시에 HTTP 기본 인증으로 사용자를 인증하므로 사용자 HTTPS 자격 증명이 필요합니다.
기본적으로 Git은 사용하는 각 리포지터리에 대해 자격 증명을 기억하는 기능을 제공합니다. 자세한 내용은 공식 Git 문서를 참조하세요.
예를 들어, 예상한 시간 동안 암호를 기억하도록 Git에 지시할 수 있습니다:
git config --global credential.helper 'cache --timeout=3600'
이렇게 하면 1시간 동안 자격 증명이 기억되며, 그 후 Git 작업에는 다시 인증이 필요합니다.
OS X를 사용하는 경우 osxkeychain
을 사용하여 자격 증명을 저장하고 암호화할 수 있습니다. Windows를 사용하는 경우 wincred
또는 Microsoft의 Git Credential Manager for Windows를 사용할 수 있습니다.
사용자 자격 증명을 저장하는 다양한 방법에 대한 자세한 내용은 Git 자격 증명 리포지터리 문서에서 찾을 수 있습니다.
LFS 객체가 푸시될 때 누락됨
GitLab은 LFS 포인터를 감지하려고 파일을 확인합니다. LFS 포인터가 감지되면 GitLab은 해당 파일이 이미 GitLab의 LFS에 존재하는지 확인하려고 시도합니다.
로컬에 LFS가 설치되어 있는지 확인하고 git lfs push --all
로 매뉴얼 푸시를 고려하세요.
GitLab 리포지터리 외부에 LFS 파일을 저장하고 있는 경우 프로젝트 API를 사용하여 lfs_enabled: false
로 설정하여 프로젝트에서 LFS를 비활성화할 수 있습니다.
LFS 객체를 외부에서 호스팅하기
git config -f .lfsconfig lfs.url https://example.com/<프로젝트>.git
와 같이 사용자 정의 LFS URL을 설정하여 LFS 객체를 외부에서 호스팅할 수 있습니다.
이 작업은 Nexus Repository와 같은 기기를 사용하여 LFS 데이터를 저장하는 경우 선택할 수 있습니다. 외부 LFS 스토어를 사용하는 경우 GitLab은 LFS 객체를 확인할 수 없습니다. 따라서 GitLab LFS 지원이 활성화되어 있으면 푸시가 실패합니다.
푸시 실패를 방지하기 위해 프로젝트 설정에서 LFS 지원을 비활성화할 수 있으며, 이로써 GitLab LFS 추가 기능(Visualizing LFS objects, LFS에 대한 UI 통합)도 비활성화됩니다.
LFS 객체를 푸시할 때 I/O 타임아웃
다음과 같은 오류가 발생할 수 있습니다:
LFS: Put "http://your-instance.com/root/project.git/gitlab-lfs/objects/cc29e205d04a4062d0fb131700e8bfc8e54c44d0176a8dca22f40b24ef26d325/15": read tcp your-instance-ip:54544->your-instance-ip:443: i/o timeout
error: failed to push some refs to 'ssh://your-instance.com:2222/root/project.git'
네트워크 상태가 불안정한 경우, Git LFS 클라이언트는 파일을 업로드하려고 시도할 때 시간 제한이 되어 파일을 업로드하는 데 실패할 수 있습니다.
이 문제를 해결하려면 클라이언트 활동 타임아웃을 더 높은 값으로 설정하세요.
예를 들어, 타임아웃을 60초로 설정하려면:
git config lfs.activitytimeout 60