Большой объект появляется в пакете git после удаления

Я уверен, что удалил этот файл, но он все еще отображается в пакете проверки. Что дает?

$ git verify-pack -v .git/objects/pack/pack-5722438014fe04ec9d559810bd7840afb6006858.idx | сортировать -k 3 -n | хвост -3

bfafbf4c4cd9a5ddbcb637a09c183c6dabe7acde blob 18960384 1061775 9232588 ec890d28afb338b258727f124e0bfbc11f6c0f0d blob 23079936 2279611 1640818 5daf9ca1b4988c240cb9ac9a2d026e5028e9fd8e blob 79966293 3803212 4919563

$ git rev-list --objects --all | grep 5daf9ca1
5daf9ca1b4988c240cb9ac9a2d026e5028e9fd8e DriverLib/json_spirit/Debug/json_spirit_reader.obj

$ git log --pretty=oneline --branches -- DriverLib/json_spirit/Debut/json_spirit_reader.obj

Когда я запускаю git log, чтобы узнать, в какой фиксации находится объект, ничего не появляется. Что дает?


person moesef    schedule 20.06.2013    source источник


Ответы (1)


Удаление файла записывает только новую фиксацию, которая не ссылается на этот файл; все предыдущие коммиты в этой ветке, которые включали файл (и фактически любой другой коммит в репозитории), могут по-прежнему ссылаться на объект blob файла, поэтому содержимое файла не собирается покидать репозиторий.

Если вам нужно полностью удалить файл из репозитория (то есть и из прошлых версий), вам нужно будет использовать git filter-branch. Обратите внимание, что этот инструмент на самом деле перезаписывает коммиты, и поэтому это острый инструмент, прежде чем пытаться переписать ветку с его помощью, обязательно сделайте еще один указатель на исходный конец ветки, которую нужно перезаписать, git branch или git tag для что.

Другая возможная причина заключается в том, что на файл по-прежнему ссылается какая-то фиксация, доступная через журнал ссылок. Если да, то либо истечет срок действия журнала ссылок, либо вручную удалите ненужные записи и запустите git gc --aggressive.

person kostix    schedule 21.06.2013
comment
Извините, я не дал вам полную информацию. Я получаю эти результаты ПОСЛЕ выполнения git filter-branch --index-filter. Теперь я подумал, что мне, вероятно, нужно сделать --tree-filter вместо этого? - person moesef; 22.06.2013