Удаление истории из команды 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