首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从github历史记录中的文件中删除敏感数据

如何从github历史记录中的文件中删除敏感数据
EN

Stack Overflow用户
提问于 2020-01-21 23:25:01
回答 3查看 7.5K关注 0票数 14

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

是否有任何方法可以还原github历史记录中的提交,在本地删除密码,然后重新推荐并推送更新的文件?我不想完全删除该文件,我也不希望丢失github上的提交历史记录。

(这个问题如何从git存储库中完全删除文件?展示了如何删除敏感文件,而不是如何从文件中编辑敏感数据,所以这不是重复的)

EN

回答 3

Stack Overflow用户

发布于 2020-01-22 05:48:15

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

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

代码语言:javascript
运行
复制
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 regex:\bdriver\b==>pilot:MM/DD/YYYY=>YYYY:(0-9{2})/(0-9{2})/(0-9{4})=>\3-\1-\2 然后跑 git过滤器-恢复-替换-文本expressions.txt #在Windows过滤器-回购-替换-文本expressions.txt ^ 将通过替换

  • p455w0rd***REMOVED***
  • foobar
  • 任何包含带有空行的666的行,
  • driver一词与pilot连用(但如果它前后有字母;例如,司机将不被修改),
  • 带有MM/DD/YYYYYYYY-MM-DD的确切文本
  • 表单MM/DD/YYYY的日期字符串与表单YYYY-MM-DD的日期字符串。

哈博亚添加了评论

在Windows上,git-filter-repo作为一个单独的Python模块工作(您可以使用pip install安装这个模块),因此您需要在上面的命令中添加一个破折号,这样它才能在pip install上工作: git-过滤器-repo替换-文本expressions.txt

票数 16
EN

Stack Overflow用户

发布于 2020-01-21 23:34:11

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

要删除文件:

代码语言:javascript
运行
复制
$ bfg --delete-files <file to remove>  my-repo.git

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

准备一个包含您希望替换的内容的替换文件,并使用BFG清除它。

代码语言:javascript
运行
复制
bfg --replace-text passwords.txt  my-repo.git
代码语言:javascript
运行
复制
# Example of the passwords.txt file: 
string1                   # Replace string ***REMOVED***' (default text)
string2==>replacementText # replace with 'replacementText' instead
string3=>                 # replace with the empty string
票数 0
EN

Stack Overflow用户

发布于 2022-02-11 07:58:26

如果您的内容已经被推送到GitHub,在使用git filter-repobfg并强制推送清理后的存储库后,向GitHub提供支持。然后,它们将确保所有对commit和它的文件的引用都从发出引用、拉请求和缓存的GitHub保存的数据中删除。只有这样,密码才会真正从你的存储库中消失。

如果有人分叉您的存储库并在敏感提交中同步,那么就没有办法强迫GitHub也清理它们的存储库。您需要让叉子的每个所有者进行相同的处理。

认为您的密码烧毁了。由于您的密码已经存在,并且需要一些时间才能完全删除,因此对于一个错误的参与者来说,有足够的时间来刮取当前的回购状态,并存储密码供以后使用。总是重置密码。不要落入陷阱,以为你仍然是安全的。

确保项目中的任何其他贡献者克隆一个新的副本,或者在固定的存储库上进行本地更改。从历史记录中删除数据的将导致所有后续提交的提交ids更改.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59850631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档