Удаление истории из команды git - git не выполняется

Я пытаюсь очистить каталог bin проекта из истории Git. Я уже добавил "bin" в .gitignore и успешно выполнил $git rm --cached -r bin. Теперь я попытался использовать команду, как рекомендовано на страницах справки GitHub, для очистки истории:

$ git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch bin' \
  --prune-empty --tag-name-filter cat -- --all

Но это приводит к ошибкам:

Rewrite <hash> (1/164) fatal: not removing 'bin' recursively without -r
index filter failed: git rm --cached --ignore-unmatch bin
rm: cannot remove 'c:/pathToMyLocalRepo/.git-rewrite/revs': Permission denied
rm: cannot remove directory 'c:/pathToMyLocalRepo/.git-rewrite': Directory not empty

Никаких других программ, содержащих /revs, не открывается. /revs не существует в указанном пути, а .git-rewrite пуст.

Я не уверен, где именно я должен добавить -r? В противном случае команда неверна?

Мне, конечно, нужно держать bin в локальном локальном репо, поскольку это мой рабочий каталог.

Спасибо

Ответы

Ответ 1

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

$ git filter-branch --force --index-filter \
  'git rm --cached -r --ignore-unmatch bin' \
  --prune-empty --tag-name-filter cat -- --all

Я последовал за этим с помощью приведенного ниже, чтобы нажать изменения в удаленном репо на github

$ git push origin master --force

Ответ 2

Единственное место, которое имеет смысл, - это после git rm. Я сам не пробовал, но думаю, что это должно сработать?

$ git filter-branch --force --index-filter \
  'git rm -r --cached --ignore-unmatch bin' \
  --prune-empty --tag-name-filter cat -- --all