Подтвердить что ты не робот

Удаление удаленных файлов из истории git

Я пытаюсь разбить подпроект моего репозитория git. Однако, в отличие от Отсоединить (переместить) подкаталог в отдельный репозиторий git У меня нет его в его собственном подкаталоге (и перемещение его и выполнение выше всего приводит к истории после переезда).

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

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

Я думаю, что это возможно с помощью git -filter-branch, но я не могу понять, как

Большое спасибо заранее

4b9b3361

Ответ 2

Хорошо, теперь я пытаюсь использовать следующую технику, будет отчитываться, если она сработает, потому что она выглядит довольно долго: В zsh или bash ON A CLONED Repository

git log --diff-filter=D --summary <start_commit>..HEAD | egrep -o '*[[:alnum:]]*(/[[:alnum:].]*)+$' > deleted.txt

чтобы получить все удаленные файлы

for del in `cat deleted.txt`
do
    git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
    # The following seems to be necessary every time
    # because otherwise git won't overwrite refs/original
    git reset --hard
    git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
    git reflog expire --expire=now --all
    git gc --aggressive --prune=now
done;

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