воскресенье, 10 декабря 2017 г.

Удалить файл из git

Бывает, из истории git-репозитория необходимо удалить какой-нибудь файл. Чаще всего это либо файл с паролем, либо файл большого размера.

Возможность такая есть и описана в книге Pro Git. Требуется использовать filter-branch, что на практике довольно не просто.

К счастью, существует альтернатива - утилита BFG.

Пользоваться довольно просто:

; Клонируем репозиторий 
$ git clone --mirror git://example.com/my-repo.git

; Удаляем файл
$ java -jar bfg.jar --delete-files FILE_NAME_TO_REMOVE my-repo.git

; Заходим в репозиторий и проводим в нем чистку
$ cd my-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

; Заливаем измененеия
$ git push
В случае, если возникает ошибка
Protected commits
-----------------

These are your protected commits, and so their contents will NOT be altered:

 * commit ******* (protected by 'HEAD')
помогает опция --no-blob-protection.