GitLab: как удалить проект с LFS файлами

Оказывается нельзя просто так взять и удалить проект с LFS файлами. Ибо после удаления проекта LFS файлы остаются и их уже не удалить просто так. Чтобы удалить такой проект корректно оказывается можно LFS файлы перекинуть в репозиторий после чего уже можно удалить сам проект.

После удаления проекта все равно могут остаться файлы в директории LFS, поэтому на всякий случай надо скопировать значение Gitaly relative path, который можно найти в Admin Area->Projects->выбираем проект и смотрим Project info.

Далее экспортируем проект Dashboard->выбираем проект->General->Advanced->Export project. Теперь распаковываем архив, клонируем и устанавливаем ссылку на удаленный репозиторий.

tar xvvf project.tar.gz
git clone project/project.bundle
cd project
git remote set-url origin https://gitlab.example.com/<namespace>/<project_name>.git
# или можно указать ссылку вручную в .git/config
# убедимся что у нас самые последние изменения
git pull

Теперь надо проанализировать репозиторий и почистить историю.

git filter-repo --analyze
head filter-repo/analysis/*-{all,deleted}-sizes.txt
git filter-repo --strip-blobs-bigger-than 10M

После чего в директории filter-repo появится файл commit-map. Если количество строк в commit.map больше 3000, то делим файл на несколько файлов.

cat filter-repo/commit-map|wc -l
split -l 3000 filter-repo/commit-map filter-repo/commit-map-

Пушим изменения на удаленный репозиторий.

git push origin --force 'refs/heads/*'
git push origin --force 'refs/tags/*'
git push origin --force 'refs/replace/*'

Чтобы запустить очистку репозитория идем в Dashboard->выбираем проект->Settings->Repository->Repository Cleanup и начинаем по очереди аплоадить файлы commit-map. Если у вас настроен почтовый релей, то после аплоада первого файла получите письмо, о том что процесс окончен и можно заливать следующий файл. Если же релея нет, то просто заливайте файлы с интервалом в 30 минут. Обычно этого времени хватает. После всех этих манипуляций даем отстоятся гиту где-то час и проверяем размер директории LFS. Обнаружится, что директория уменьшилась в размере, но увеличилась в размере директория с репозиториями. Теперь можно удалить проект. И в последнюю очередь стоит проверить не осталось ли LFS файлов, которые уже можно безопасно удалить. Для этого идем в директорию LFS и проверям путь, который ранее скопировали с Gitaly relative path.

Ссылка на официальную документацию: https://docs.gitlab.com/ee/user/project/repository/reducing_the_repo_size_using_git.html#purge-files-from-repository-history

Показать комментарии