[英]How to remove sensitive data from a file in github history
我正在使用共享的 github 存储库来协作项目。 因为我是个白痴,所以我提交并推送了一个包含我不想共享的密码的脚本文件(是的,我可以更改密码,但我还是想删除它。)。
有没有办法从 github 的历史记录中恢复提交,在本地删除密码,然后重新提交并推送更新的文件? 我不想完全删除该文件,也不想丢失 github 上的提交历史记录。
(这个问题如何从 git 存储库中完全删除文件?显示如何删除敏感文件,但不显示如何从文件中编辑敏感数据,所以这不是重复的)
我建议使用新的git filter-repo
,它取代了 BFG 和git filter-branch
。
注意:如果您在运行上述命令时收到以下错误消息:
Error: need a version of `git` whose `diff-tree` command has the `--combined-all-paths` option`
这意味着您必须更新git
。
第一:做一份本地仓库的副本(一个新的克隆)
参见“ 内容库过滤”:
最后,您可以(如果您是唯一在该存储库上工作的人)执行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***
,foo
与bar
,- 任何包含
666
和空行的行,- 带
pilot
driver
这个词(但如果前面或后面有字母,则不是;例如,司机将不被修改),- 带有
YYYY-MM-DD
的确切文本MM/DD/YYYY
和- 格式为
MM/DD/YYYY
日期字符串和格式YYYY-MM-DD
日期字符串。
使用 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
如果您的内容已被推送到 GitHub,在使用git filter-repo
或bfg
清理存储库并强制推送清理后的存储库后, 请联系 GitHub 支持。 然后,他们将确保从问题引用、拉取请求和 GitHub 保留的缓存数据中删除对提交及其文件的所有引用。 只有这样,密码才会真正从您的存储库中消失。
如果有人分叉您的存储库并在敏感提交中同步,则无法强制 GitHub 也清理他们的存储库。 您需要通过相同的过程向 go 的每个前叉所有者询问。
考虑将您的密码烧毁。 由于您的密码已经存在并且需要一些时间才能完全删除,因此不良行为者有足够的时间刮取您当前的回购 state 并存储密码以供以后使用。 始终重置密码。 不要落入认为你可能仍然安全的陷阱。
确保您项目中的任何其他贡献者克隆一个新副本或在固定存储库上重新设置本地更改。 从历史记录中删除数据将导致所有后续提交的提交 ID 更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.