полное удаление файла из git repo (с определенного момента времени) - PullRequest
4 голосов
/ 24 июня 2011

У меня есть репо с 2030 коммитами. Примерно в 2000 году был изменен файл, из-за которого его размер случайно увеличился с 20 до 1,2 ГБ. Можно ли переписать историю, чтобы удалить этот файл, но только из commit 2000? (Я не хочу терять предыдущую историю этого файла)

Я думал о git-filter-branch, но не мог найти способ сказать ему "из коммита" - возможно ли это?

Приветствие Mike

Ответы [ 3 ]

2 голосов
/ 24 июня 2011

Страница man для git-filter-branch содержит убедительный и авторитетный пример для этого.

Если вы хотите прекратить переписывание перед определенным коммитом, скажите, прежде чем tag01:

git-filter-branch ......  -- master ^tag01

Замените то, что у вас уже есть, на точки. Вместо этого tag01 может быть любым коммитом (revspec)

PS: если вы используете теги, не забудьте --tag-name-filter cat переписать их тоже

1 голос
/ 02 февраля 2013

Возможно, вы захотите попробовать BFG Repo-Cleaner , более быструю и простую альтернативу git-filter-branch, предназначенную для удаления больших файлов или личных данных из репозиториев Git.

Скачать исполняемый файл jar (требуется Java 6 или выше) и выполните эту команду:

$ java -jar bfg.jar --strip-blobs-more-than 100MB my-repo.git

Все файлы размером более 100 МБ (которых нет в файловой иерархии самой последней фиксации) будут полностью удалены из истории вашего репозитория.Все версии файла размером менее 100 МБ будут оставлены в покое, как указано в вопросе.

Полное раскрытие: я являюсь автором BFG Repo-Cleaner.

1 голос
/ 24 июня 2011

Почему бы вам не

  1. Создать ветку new при коммите 2000, где вы не измените этот файл на файл объемом 1,2 ГБ
  2. Перебазировать masternew, с опцией слияния -Xtheirs
  3. Сборка мусора в хранилище для экономии места на диске.
...