Удаление личной информации из старых коммитов Git - PullRequest
13 голосов
/ 09 февраля 2010

У меня есть проект с версией Git, который я хотел бы сделать с открытым исходным кодом, но в нем есть некоторая личная информация, специфичная для среды, в которой он был изначально использован. Я собираюсь изменить информацию для загрузки из файла конфигурации, который не включен в репозиторий. Я понимаю, что должен был сделать это в первую очередь, но поскольку личная информация все еще существует в предыдущих коммитах, как я могу удалить ее из своей истории? Должен ли я просто запустить новый репозиторий на основе последнего коммита и потерять всю мою историю, или есть способ спасти текущий репозиторий при удалении любой записи личной информации?

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

Ответы [ 2 ]

5 голосов
/ 31 марта 2013

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

Инструкции по использованию описывают шаги более подробно, но основной бит прост: скачайте банку BFG (требуется Java 6 или выше) и выполните эту команду:

$ java -jar bfg.jar  --replace-text replacements.txt  my-repo.git

Файл replacements.txt должен содержать все замены, которые вы хотите сделать, в таком формате (одна запись на строку - обратите внимание, что комментарии не должны быть включены):

PASSWORD1 # Replace literal string 'PASSWORD1' with '***REMOVED***' (default)
PASSWORD2==>examplePass         # replace with 'examplePass' instead
PASSWORD3==>                    # replace with the empty string
regex:password=\w+==>password=  # Replace, using a regex

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

Полное раскрытие: я являюсь автором репо-уборщика BFG.

2 голосов
/ 09 февраля 2010

Я написал сценарий для этого недавно. Вы можете найти его здесь: https://gist.github.com/dound/76ea685c05c4a7895247457eb676fe69

(оригинальная запись доступна для просмотра из archive.org: https://web.archive.org/web/20160208235904/http://dound.com:80/2009/04/git-forever-remove-files-or-folders-from-history/)

Скрипт основан на инструменте git-filter-branch , который поставляется с git. Если вам интересно, вы можете прочитать больше об удалении файлов из репозитория git здесь , но использование скрипта по ссылке выше должно быть простым и все, что вам действительно нужно для удаления этой личной информации.

...