kodnik
@kodnik

Как контролировать размер GIT репозитория?

Как лучше контролировать и ограничивать размер репозитория на git? На данный момент вижу 2 варианта реализации:
  1. средствами git, в хуке update прописать некую константу предела размера и проверять размер через команду "git count-objects -v"
  2. средствами ОС, проверять размер каталога и в случае достижения предела в хук update вставить - блокирование


Какой вариант предпочтительней? Или есть более простой способ?
  • Вопрос задан
  • 1759 просмотров
Решения вопроса 1
kodnik
@kodnik Автор вопроса
Решил через хуки git'а, с размещением на сервере: .git/hooks/pre-receive

#!/bin/bash

# лимит размера в Gb
sizelimit_gb=2

reposize_kb=`git count-objects -v | grep 'size-pack' | sed  's/.*\(size-pack:\).//'`
let reposize_b=$reposize_kb*1024
let sizelimit_b=$sizelimit_gb*1024*1024*1024

if [ $reposize_b -gt $sizelimit_b ]; then
    echo "Ошибка: размер репозитория > $sizelimit_gb Gb"
    exit 1
#else
#    echo "<= $sizelimit_gb Gb"
fi

exit 0


Выше сценарий должен быть сохранен как .git/hooks/pre-receive на сервере, с разрешением на выполнение (chmod +x .git/hooks/pre-receive).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov
Web developer
По-моему, правильнее не ограничивать размер, а периодически оптимизировать репозиторий.

Вот несколько разных команд (их можно применять независимо друг от друга). Советую предварительно сделать бекап репы, потому что эти команды делают необратимое удаление некоторых файлов!
git prune
git gc
git gc --aggressive
git repack
git repack -a
git prune-packed
git reflog expire --all --expire=now
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0  -c gc.rerereresolved=0 -c gc.rerereunresolved=0   -c gc.pruneExpire=now gc "$@"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы