Как удалить конфиденциальные данные из файла в истории GitHub - PullRequest
1 голос
/ 22 января 2020

Я использую общий репозиторий github для совместной работы над проектом. Поскольку я идиот, я зафиксировал и выдвинул файл сценария, содержащий пароль, которым я не хочу делиться (Да, я могу изменить пароль, но я все равно хотел бы удалить его!).

Есть ли способ вернуть коммиты из истории github, удалить пароль локально, а затем подтвердить и выложить sh обновленные файлы? Я не хочу полностью удалять файл и не буду терять историю коммитов на github.

(Этот вопрос Как мне полностью удалить файл из git хранилища? показывает, как удалить конфиденциальный файл, но не как редактировать конфиденциальные данные из файла, поэтому это не дубликат)

Ответы [ 2 ]

3 голосов
/ 22 января 2020

Я бы порекомендовал использовать новый git filter-repo, который заменяет BFG и git filter-branch.

Примечание: если вы получаете следующее сообщение об ошибке, когда Выполнение вышеупомянутых команд:

Error: need a version of `git` whose `diff-tree` command has the `--combined-all-paths` option`

это означает, что вам необходимо обновить git.


Во-первых: сделайте одну копию вашей локальной репо (новый клон)

См. « Фильтрация базы контента »:

В конце вы можете (если вы работаете только с этим хранилищем) a git push --force

Если вы хотите изменить содержимое файла, вы можете сделать это на основе списка выражений в файле, по одному на строку.
Например, с файлом с именем expressions.txt содержит:

p455w0rd
foo==>bar
glob:*666*==>
regex:\bdriver\b==>pilot
literal:MM/DD/YYYY=>YYYY-MM-DD
regex:([0-9]{2})/([0-9]{2})/([0-9]{4})==>\3-\1-\2

, затем работает

git filter-repo --replace-text expressions.txt

будет go и заменят :

  • p455w0rd с ***REMOVED***,
  • foo с bar,
  • любой строкой, содержащей 666 с пустой строкой,
  • словом driver с pilot (но не при наличии букв до или после; например, драйвер s не изменится),
  • точный текст MM/DD/YYYY с YYYY-MM-DD и
  • строки даты в форме MM/DD/YYYY и строки YYYY-MM-DD.
0 голосов
/ 22 января 2020

Используйте BFG: https://rtyley.github.io/bfg-repo-cleaner/

Для удаления файлов:

$ bfg --delete-files <file to remove>  my-repo.git

enter image description here


Вы также можете использовать этот инструмент для удаления паролей и данных, чувствительных к муравьям.

Подготовьте файл замены с содержимым, которое вы будете заменять sh, и используйте BFG для его очистки.

bfg --replace-text passwords.txt  my-repo.git

# Example of the passwords.txt file: 
string1                   # Replace string ***REMOVED***' (default text)
string2==>replacementText # replace with 'replacementText' instead
string3=>                 # replace with the empty string
...