LINUX.ORG.RU

Как почистить историю git?

 


0

2

Есть небольшой проект. Периодически делаю коммиты и отправляю ветку на сервер (push). За всю историю было коммитов 40. Размер файлов с кодами отсилу 300 кб однако размер репозитория разросся до 500 мб. Я особо не заморичивался и добавлял в индекс все что было в папке рабочего проекта. Туда иногда попадал всякий хлам который тоже коммитился. Сейчас хочу почистить историю проекта и поудалять тяжелые файлы, чтобы уменьшить размер репозитория. В связи с этим вопросы:

1. Как посмотреть в истории коммитов общий размер добавленных в коммит файлов. Т.е. хотелось бы видеть список всех коммитов на против которых был бы отражен размер добавленной в репозитопий информации.

2. Как увидеть список директорий/файлов конкретного коммита с указанием размеров директории/файла. Было бы здорово с возможностью фильтрации по размеру.

3. Как удалить конкретный файл или директорию с файлами полностью из коммита и истории git?

Буду благодарен за любую информацию.


Книга Pro Git 1

Последняя глава, подраздел «Удаление объектов»

https://git-scm.com/book/ru/v1/Git-изнутри-Обслуживание-и-восстановление-данных

Во второй книжке, по идее, более актуальная информация:

https://git-scm.com/book/ru/v2/Git-изнутри-Уход-за-репозиторием-и-восстановле...

Но я её не читал.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)

Посмотреть большие файлы https://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-ob...

Удалить файл можно так:

function f()
{
    file_name=$1
    count=$(git log --pretty=oneline --branches -- "$file_name"|wc -l)
    if (( count > 0 )); then
        git filter-branch --index-filter "git rm --cached '$file_name' --ignore-unmatch" --prune-empty --tag-name-filter cat --force -- --all
        git reflog expire --expire=now --all
        git gc --aggressive --prune=now
    fi
}

f "./Bin/BigFile.ISO"

x905 ★★★★★
()

Я особо не заморичивался и добавлял в индекс все что было в папке рабочего проекта. Туда иногда попадал всякий хлам который тоже коммитился.

Пользуйся .gitignore, сильно упрощает дело.

Crocodoom ★★★★★
()

Я особо не заморичивался и добавлял в индекс все что было в папке рабочего проекта. Туда иногда попадал всякий хлам который тоже коммитился

Попробуй git gui. Выбрать, что добавить в индекс, можно легко и *с точностью до отдельных строчек кода*

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.