Удалить все файлы из истории, которых нет в рабочем дереве - PullRequest
2 голосов
/ 09 июля 2019

Много ответов на StackExchange имеют дело с удалением данного файла из всех коммитов в истории с чем-то вроде:

git filter-branch --prune-empty -d /dev/shm/scratch \
 --index-filter "git rm --cached -f --ignore-unmatch filename" \
 --tag-name-filter cat -- --all

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

Со страницы руководства это можно сделать для индекса с помощью:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

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

Что я не могу понять, так это то, как изменить версию команды rm фильтра-ветки, чтобы она сравнивала эту версию индекса с заголовком (таким образом, удаляя все удаленные файлы).

Цель этого состоит в том, чтобы удалить все файлы в истории, которых нет в текущем рабочем дереве.

1 Ответ

1 голос
/ 09 июля 2019

Целью этого было бы удалить все файлы в истории, которых нет в текущем рабочем дереве.

Хотя вы используете git filter branch, выВозможно, стоит рассмотреть возможность использования BFG Repo Cleaner (более быстрой и простой альтернативы), поведение которого очень похоже на это из коробки.Существуют небольшие различия:

... поэтому, если вы используете:

$ bfg --delete-files "*.png"

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

В моем репо со временем было много данных, и я надеюсь значительно уменьшить его размер

Поскольку ваша общая цель - уменьшить размер, так долгокогда вы достигаете этого, вы счастливы!Таким образом, вы можете выполнить:

$ bfg --strip-blobs-bigger-than 10K

... и это приведет к удалению всех (не текущих) файлов размером более 10 килобайт - это значительно уменьшит размер репо, а побочные выгоды сохранят историюменьших файлов, которые не были проблематичными.

Полное раскрытие: я являюсь автором BFG Repo-Cleaner .

...