Удаление личной информации из старого Git совершает
У меня есть проект с версией Git, который я бы хотел создать с открытым исходным кодом, но в нем есть частная информация, которая специфична для среды, в которой она была первоначально использована. Я собираюсь изменить соответствующую информацию для загрузки из файла конфигурации, который не включен в репозиторий. Я понимаю, что я должен был сделать это в первую очередь, но поскольку частная информация все еще существует в предыдущих коммитах, как я могу ее удалить из своей истории? Мне просто нужно запустить новый репозиторий на основе последней фиксации и потерять всю мою историю или есть способ спасти текущий репозиторий при удалении любой записи частной информации?
Изменить: Чтобы уточнить, я не хочу полностью удалять файлы, содержащие эту личную информацию, потому что они все еще используются. Скорее, я хочу удалить/удалить/изменить появление определенных строк внутри них.
Ответы
Ответ 1
Я написал script для этого некоторое время назад. Вы можете найти его здесь: http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
script основывается на git-filter-branch, который поставляется с git. Если вам интересно, вы можете прочитать больше об удалении файлов из git repo здесь, но используя script из ссылки выше должно быть легко и все, что вам действительно нужно, чтобы удалить эту личную информацию.
Ответ 2
Я бы рекомендовал использовать BFG Repo-Cleaner, более быструю и быструю альтернативу git-filter-branch
, специально разработанную для удаления личных данных из Git repos.
Инструкции по использованию дают более подробные инструкции, но основной бит просто: загрузите BFG jar (требуется 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 Repo-Cleaner.