Подтвердить что ты не робот

Удаление личной информации из старого Git совершает

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

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

4b9b3361

Ответ 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.