Очистка истории GIt не уменьшает размер папки - PullRequest
0 голосов
/ 23 октября 2019

Я чищу местное git-репо с большим количеством больших архивов в истории. Я сделал следующие шаги:

  1. Список всех файлов tarball в репозитории
FILE_LIST=`git rev-list master | while read rev; do git ls-tree -lr $rev  | cut -c54- | sed 's/^ +//g;'; done | grep <tarball name> | awk '{print $2}' | sort | uniq | tr '\n' ' '`
Отметить их для удаления
git filter-branch --tag-name-filter cat --index-filter "git rm -r --cached --ignore-unmatch $FILE_LIST" --prune-empty -f -- --all
Сборка мусора
rm -rf .git/refs/original/ && git reflog expire --expire=now --all && git gc --aggressive --prune=now
Push
git push origin --force --all && git push origin --force --tags

Сделав это, я значительно уменьшил размер локального репо. Тем не менее, когда я получил чистый клон из источника после описанных выше шагов, размер клонированного репо не уменьшается, но эти большие архивы исчезают, проверяя

FILE_LIST=`git rev-list master | while read rev; do git ls-tree -lr $rev  | cut -c54- | sed 's/^ +//g;'; done | grep <tarball name> | awk '{print $2}' | sort | uniq | tr '\n' ' '`

Я снова выполнил этап сбора мусорав клонированном репо размер не уменьшился.

Кто-нибудь знает, как я могу уменьшить размер репо на исходном сервере? Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2019
git rev-list --all --objects |                                # catalog of everything
git cat-file --batch-check='%(objectname) %(objectsize) %(rest)' |  # sha, size, name
awk '$2>limit{print $1}' limit=$((1*1024*1024))'             # just the oversize ones 

расскажет вам самые большие объекты в вашем репо. Поиск коммитов, которые их представили, - это поиск по

git log --all --raw --no-abbrev --pretty=format:%H \
| awk 'NF==1 { commit=$1 } NF!=1 { print commit,$4 }'

совпадений с вашими большими объектами, запись больших идентификаторов в файл и grep -Ff из этого через необработанные журналы, которые покажут вам, какиекоммиты представили какой большой объект. Разобравшись с остальным, я уйду к вам.

...