Смущает 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 Я подумал об удалении своего вопроса, однако, это может сэкономить кому-то довольно много времени.