Смущает git filter-branch

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

Я написал Perl скрипт remove-all-but-stuff и проверил, что работает правильно. Первоначально я думал, что будет достаточно простого удаления файлов, но потом я исправил это использование

system qw(git rm -r --ignore-unmatch --quiet), @files

где @files содержит ненужные каталоги и файлы в том виде, в котором они находятся в рабочем дереве. Может ли это быть проблемой?

Я создал новую ветку и отфильтровал ее через

git filter-branch --tree-filter remove-all-but-stuff my-branch

и в конце файлы исчезают, но это происходит при самом последнем коммите. История содержит изменения в файлах, которые не должны существовать.

Я использую GIT версии 2.3.5. Есть идеи, что я делаю не так?


Теперь я даже добавил несколько путей к @files не глядя, если есть. Что-то изменилось (Ref '/ заголовки /my-branch' были переписаны), но ненужные файлы (даже ниже добавленных путей) все еще в истории.

1 ответ

Это довольно глупо, но это была ошибка с моей стороны.1 Я пропустил (хорошо спрятанное) сообщение об ошибке. Проблема была

error: the following files have changes staged in the index:

(скрыто в конце строки и может сопровождаться сотнями файлов). Я думаю, я забыл -f модификатор (также забыл выручить при ошибке).

На самом деле, похоже, нет смысла использовать git rm вместо /bin/rm вместе с --tree-filter,


1 Я подумал об удалении своего вопроса, однако, это может сэкономить кому-то довольно много времени.

Другие вопросы по тегам