Как удалить неиспользуемые объекты из репозитория git?


Answers

git reflog expire --all - git reflog expire --all . Он удаляет записи журнала, которые старше, чем время истечения срока действия, которое по умолчанию составляет 90 дней. Используйте git reflog expire --all --expire=now .

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

Question

Я случайно добавил, зафиксировал и нажал огромный двоичный файл с моей самой последней фиксацией в репозиторий Git.

Как я могу заставить Git удалить объекты (объекты), которые были / были созданы для этой фиксации, поэтому мой каталог .git снова сжимается до нормального размера?

Изменить : Спасибо за ваши ответы; Я попробовал несколько решений. Никто не работал. Например, один из GitHub удалил файлы из истории, но размер каталога .git не уменьшился:

$ BADFILES=$(find test_data -type f -exec echo -n "'{}' " \;)

$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $BADFILES" HEAD
Rewrite 14ed3f41474f0a2f624a440e5a106c2768edb67b (66/66)
rm 'test_data/images/001.jpg'
[...snip...]
rm 'test_data/images/281.jpg'
Ref 'refs/heads/master' was rewritten

$ git log -p # looks nice

$ rm -rf .git/refs/original/
$ git reflog expire --all
$ git gc --aggressive --prune
Counting objects: 625, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (598/598), done.
Writing objects: 100% (625/625), done.
Total 625 (delta 351), reused 0 (delta 0)

$ du -hs .git
174M    .git
$ # still 175 MB :-(



Hy!

Git получает только объекты, которые ему нужны при клонировании репозиториев (если я правильно их понимаю)

Таким образом, вы можете вносить изменения в последнюю фиксацию, удаляя файл, добавленный по ошибке, а затем вносите изменения в удаленный репозиторий (с опцией -f для перезаписывания старой фиксации на сервере тоже)

Затем, когда вы создаете новый клон этого репо, это .git-каталог должен быть таким же маленьким, как и до того, как был сделан большой файл (ы).

Необязательно, если вы хотите удалить ненужные файлы с сервера, вы можете удалить репозиторий на сервере и нажать свою недавно клонированную копию (имеющую полную историю)




Это руководство по удалению конфиденциальных данных может применяться, используя тот же метод. Вы будете переписывать историю, чтобы удалить этот файл из каждой версии, в которой он присутствовал. Это разрушительно и вызовет конфликты репо с любыми другими проверками, поэтому сначала предоставьте кому-либо соавторов.

Если вы хотите сохранить доступный двоичный файл в репо для других людей, тогда нет реального способа делать то, что вы хотите. Это почти все или ничего.







Related