Git filter-branch говорит, что рабочее дерево грязное, когда его нет - PullRequest
9 голосов
/ 24 июня 2011

Я пытаюсь переписать свою историю в моем git-репозитории, потому что мне нужно удалить файл, содержащий ограниченную информацию.

Вот что происходит:

$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch FILE' master
Cannot rewrite branch(es) with a dirty working directory.

Так что я думаю«это странно, я почти уверен, что у меня нет незафиксированных изменений», и я запускаю:

$ git status -u
# On branch master
nothing to commit (use -u to show untracked files)

Что здесь происходит?У кого-нибудь есть идеи о том, что может происходить?В этом хранилище есть подмодули.

Информация о подмодулях

У меня 18 подмодулей (все плагины Vim), и вот их статусы.Думаю, это может быть полезной информацией.

$ for i in $(ls); do cd $i; git status -u; cd ..; done;
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# On branch master
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)

Другая информация

$ git diff-files --ignore-submodules --quiet
$ echo $?
1
$ git diff-index --cached --quiet HEAD --
$ echo $?
0

1 Ответ

7 голосов
/ 12 февраля 2012

В основном это предположение, но ошибка может быть вызвана ошибкой, исправленной в git v1.7.7.1 (которая была выпущена после вашего исходного поста).Из сообщения фиксации:

Фильтрующая ветвь уже требует, чтобы у нас было чистое рабочее дерево перед запуском.Тем не менее, он не смог обновить индекс перед проверкой, что означает, что он может быть неправильным в случае стат-грязности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...