개요
GitLab 저장소 백업을 위해 GitLab의 Mirroing repositories 기능을 이용해 다른 GitLab 저장소로 Push하고 있는데, 아래와 같은 LFS objects are missing 에러 메세지와 함께 Push에 실패했다.
13:close stream to gitaly-ruby: rpc error: code = Unknown desc = Gitlab::Git::CommandError: remote: GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all". To http://gitlab.example/root/test.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'http://gitlab.example/root/test.git' .
저장소를 확인해보니, LFS 객체가 포함되어 있었다.
Gitlab Mirroing repositories 기능을 이용하는 게 아니라면 수동으로 해결할 수 있었을 것 같지만, 이번 일은 Mirroing repositories 기능을 이용해야했다. 확인해보니 미러링 저장소, 즉 백업 저장소에서 LFS를 비활성화하면 문제 없이 미러링이 가능했다.
GitLab 서버 LFS 비활성화 방법
기본적으로 GitLab 서버는 LFS를 활성화하고 있는데, 설정 파일을 수정 후 적용하면 이를 비활성화할 수 있다. 옴니버스 설치를 한 경우, 수정할 설정 파일은 /etc/gitlab/gitlab.rb 이다.
vi /etc/gitlab/gitlab.rb
# 생략
# Change to true to enable lfs - enabled by default if not defined
gitlab_rails['lfs_enabled'] = false
# Optionally, change the storage path location. Defaults to
# `#{gitlab_rails['shared_path']}/lfs-objects`. Which evaluates to
# `/var/opt/gitlab/gitlab-rails/shared/lfs-objects` by default.
gitlab_rails['lfs_storage_path'] = "/mnt/storage/lfs-objects"
설정 파일을 수정한 후에는 configure 명령을 사용해야 서비스가 재시작되면서 적용된다.
gitlab-ctl reconfigure
Gitlab 프로젝트 LFS 비활성화 방법
GitLab 서버 전체를 변경하는 게 부담스럽다면 해당 프로젝트만 비활성화하는 방법도 있다.
해당 프로젝트의 Settings > General로 이동한 후 Visibility, project features, permissions 항목을 펼친다.
항목에서 Git Large File Storage (LFS) 부분을 비활성화한다.
동작 확인
머러링 에러가 발생했던 저장소에서 다시 미러링을 시도하면 정상적으로 동작하는 것을 확인할 수 있다.
참고 문서
https://docs.gitlab.com/ee/topics/git/lfs/