Git, ветвь фильтра на всех ветвях
Я использую следующие источники для извлечения некоторых больших файлов и каталогов из моего репозитория:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
Почему мой репозиторий git такой большой?
git filter-branch
работает только в текущей ветке - есть ли способ применить его ко всем ветвям сразу?
Ответы
Ответ 1
Решение прост:
git filter-branch [options] -- --all
Обратите внимание на четыре тире (два набора двойных штрихов с пробелом между ними) в -- --all
.
Если вы посмотрите на документы для git-filter-branch
, он говорит следующее:
git filter-branch [--env-filter <command>] [--tree-filter <command>]
[--index-filter <command>] [--parent-filter <command>]
[--msg-filter <command>] [--commit-filter <command>]
[--tag-name-filter <command>] [--subdirectory-filter <directory>]
[--prune-empty]
[--original <namespace>] [-d <directory>] [-f | --force]
[--] [<rev-list options>…]
Чтение в начале документа говорит: "Позволяет переписать историю изменений git, переписав ветки, упомянутые в < rev-list options > , применяя настраиваемые фильтры для каждой ревизии."
Таким образом, проверка документов для rev-list
дает:
< rev-list options > ... Аргументы для git rev-list. Все положительные ссылки включенные этими опциями, переписываются. Вы также можете указать параметры такие как --all, но вы должны использовать - чтобы отделить их от gitпараметры фильтрации.
И документы для git-rev-list
говорят:
--all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.
Ответ 2
Как объясняет @ben-lee, --all
требуется для переписывания всех ветвей. Если в вашем репо есть теги, вы захотите очистить все эти, а также ветки, чтобы получить преимущества уменьшения размера, и для этого потребуется дополнительная --tag-name-filter cat
заклинание.
Хотя вопрос указывает на использование git filter-branch
, вопросник хочет "удалить некоторые большие файлы и каталоги из моего репозитория", поэтому стоит упомянуть, что инструмент лучший для этого на самом деле Очиститель BFG Repo, более простая и быстрая альтернатива git filter-branch
. Например:
$ bfg --strip-blobs-bigger-than 10M
... удаляет все капли размером более 10 МБ (которые не входят в вашу последнюю фиксацию) и работает во всех ветвях и тегах в вашем репо.
Полное раскрытие: я являюсь автором BFG Repo-Cleaner.
Ответ 3
Я выполнил все инструкции для этого в своем ящике Windows, но я продолжал получать сообщение об ошибке, пока не прекратил использовать одинарные кавычки и вместо этого использовал двойные кавычки.
Моей мотивацией было то, что я случайно проверил в моей среде vagrant
. Здесь команда удалить папку vagrant
из всех ветвей:
git filter-branch --tree-filter "rm -rf vagrant" -f HEAD --all
Просто замените vagrant
на ваше имя каталога и удалите этот каталог из всех ветвей.