【问题标题】:How to remove sensitive data from a file in github history如何从 github 历史记录中的文件中删除敏感数据
【发布时间】:2020-05-08 01:50:26
【问题描述】:

我正在使用一个共享的 github 存储库来协作处理一个项目。因为我是个白痴,所以我提交并推送了一个包含我不想共享的密码的脚本文件(是的,我可以更改密码,但我还是想删除它!)。

有没有办法从 github 的历史记录中恢复提交,在本地删除密码,然后重新提交并推送更新的文件?我不想完全删除文件,也不想丢失 github 上的提交历史。

(这个问题 How can I completely remove a file from a git repository? 展示了如何删除敏感文件,但没有展示如何编辑文件中的敏感数据,所以这不是重复的)

【问题讨论】:

  • 这能回答你的问题吗? How to substitute text from files in git history?
  • 我宁愿不要丢失 github 上的提交历史:要明确的是,您仍然希望提交历史包含带有密码的文件的可见修订?跨度>
  • 不 - 对不起,我不明白 - 我想要其余的提交历史记录,但删除了密码

标签: git github revert


【解决方案1】:

使用 BFG:https://rtyley.github.io/bfg-repo-cleaner/

删除文件:

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


您还可以使用此工具删除密码和蚂蚁敏感数据。

准备一个包含您要替换的内容的替换文件,然后使用 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

【讨论】:

  • 嗯 .. 这将清理我的 git 存储库,但如果我随后推送到 github,它不会只是添加另一个(干净的)提交并将密码留在 github 历史记录中吗?
  • 使用 BFG 会将其从整个历史记录中删除,但您必须强制推送以覆盖当前内容
  • 已安装 bfg 但bfg --replace-text passwords.txt 给我一个语法错误bfg --replace-text passwords.txt ^ SyntaxError: invalid syntax
  • SyntaxError 看起来像 Python 错误。我怀疑您在 Python 命令行中运行了该命令。在操作系统控制台、操作系统命令解释器中运行它。
【解决方案2】:

我建议使用新的git filter-repo,即replaces BFG and git filter-branch

注意:如果您在运行上述命令时收到以下错误消息:

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

这意味着你必须update git


首先:复制一份本地 repo(一个新的克隆)

见“Content base filtering”:

最后,您可以(如果您是唯一在该存储库上工作的人)执行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

将通过并替换

  • p455w0rd***REMOVED***,
  • foobar
  • 任何包含666 的行和一个空行,
  • 单词driverpilot(但如果它之前或之后有字母,则不是;例如,驱动程序不会被修改),
  • MM/DD/YYYYYYYY-MM-DD 的确切文本和
  • MM/DD/YYYY 形式的日期字符串与 YYYY-MM-DD 形式的日期字符串。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2014-12-13
  • 1970-01-01
  • 2017-10-01
相关资源
最近更新 更多