我正在使用一个共享的github存储库来协作一个项目。因为我是个白痴,所以我提交并推送了一个包含我不想共享的密码的脚本文件(是的,我可以更改密码,但无论如何我还是想删除它!)
是否有任何方法可以还原github历史记录中的提交,在本地删除密码,然后重新推荐并推送更新的文件?我不想完全删除该文件,我也不希望丢失github上的提交历史记录。
(这个问题如何从git存储库中完全删除文件?展示了如何删除敏感文件,而不是如何从文件中编辑敏感数据,所以这不是重复的)
发布于 2020-01-22 05:48:15
我建议使用新的git filter-repo
,即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 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***
,foo
和bar
,666
的行,driver
一词与pilot
连用(但如果它前后有字母;例如,司机将不被修改),MM/DD/YYYY
和YYYY-MM-DD
的确切文本MM/DD/YYYY
的日期字符串与表单YYYY-MM-DD
的日期字符串。在Windows上,
git-filter-repo
作为一个单独的Python模块工作(您可以使用pip install
安装这个模块),因此您需要在上面的命令中添加一个破折号,这样它才能在pip install
上工作: git-过滤器-repo替换-文本expressions.txt
发布于 2020-01-21 23:34:11
使用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
发布于 2022-02-11 07:58:26
如果您的内容已经被推送到GitHub,在使用git filter-repo
或bfg
并强制推送清理后的存储库后,向GitHub提供支持。然后,它们将确保所有对commit和它的文件的引用都从发出引用、拉请求和缓存的GitHub保存的数据中删除。只有这样,密码才会真正从你的存储库中消失。
如果有人分叉您的存储库并在敏感提交中同步,那么就没有办法强迫GitHub也清理它们的存储库。您需要让叉子的每个所有者进行相同的处理。
认为您的密码烧毁了。由于您的密码已经存在,并且需要一些时间才能完全删除,因此对于一个错误的参与者来说,有足够的时间来刮取当前的回购状态,并存储密码供以后使用。总是重置密码。不要落入陷阱,以为你仍然是安全的。
确保项目中的任何其他贡献者克隆一个新的副本,或者在固定的存储库上进行本地更改。从历史记录中删除数据的将导致所有后续提交的提交ids更改.。
https://stackoverflow.com/questions/59850631
复制相似问题