消除GitHub上的历史记录

栏目: 编程工具 · 发布时间: 6年前

内容简介:GitHub作为全球最大的交友平台而被我们所熟知,但是我们有时候会将某些不适当的信息发布到网络上去,而GitHub并没有良好的交互界面让我们能在两分钟内撤回错误。作为世界上比较有名的犬种,在将个人的某些账号信息以及某些资源(捂脸)完全公开之后,内心没有丝毫波动,甚至有点想笑,我为什么会出现这种破问题。本着万事开头难,中间难,结尾难的想法,在被世人所不齿之前,踏上自救之路。

GitHub作为全球最大的交友平台而被我们所熟知,但是我们有时候会将某些不适当的信息发布到网络上去,而GitHub并没有良好的交互界面让我们能在两分钟内撤回错误。

作为世界上比较有名的犬种,在将个人的某些账号信息以及某些资源(捂脸)完全公开之后,内心没有丝毫波动,甚至有点想笑,我为什么会出现这种破问题。

本着万事开头难,中间难,结尾难的想法,在被世人所不齿之前,踏上自救之路。

方案一:删库

方案二:三个步骤,其实前两步都没什么用

首先将当前版本的某些数据删掉(做完这一步之后突然意识到我可能连有名的犬种都不算);

其次将仓库设为私有(此时已经能免费设置私有仓库了,先谢谢一下微软),打开 GitHub Help (GitHub对我这种曾经没用功读书的人非常不友好,学霸读到这就可以跳过阅读原文),输入 removing sensitive 的时候,出现了几个提示引起我的注意:

消除GitHub上的历史记录

最后 删除敏感数据 ,文章大概意思如下:

清除仓库中的敏感数据

如果你提交了敏感数据,例如密码或者SSH秘钥之类的到Git仓库, 你可以从历史中删掉他们。想完全删除不想要的文件历史记录你可以使用 git filter-branch 命令或者 BFG Repo-Cleaner 开源社区工具。

git filter-branch 命令和 BFG Repo-Cleaner 可以重写你的仓库历史,他们可以更改目前存在的任何单独提交记录的或者有依赖的提交记录(SHA意思为哈希算法,可理解为提交记录)。修改提交记录可能会影响正在使用的 pull request,我们建议在进行清除敏感数据之前进行必要的合并或关闭请求。

你也可以使用 git rm 命令来删除文件。关于删除最新提交文件的信息可移步“ Removing files from a repository's history ”。

警告:一旦你提交到GitHub,应该考虑到数据可能会受到的任何影响。如果提交了密码,修改密码,提交了秘钥,及时换一个新的。

本文将阐述……(到这已经记不清英语老师长什么样了)

清除仓库的文件历史记录

使用 BFG

BFG Repo-Cleaner 是一个由开源社区开发且维护的工具,它提供了比 git filter-branch 更加简便快捷的方法来删除不想要的数据。比如,删除你文件中的敏感数据且不影响最新的提交,执行:

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

可以在 password.txt 中列出所有文本来进行替换,执行:

$ bfg --replace-text passwords.txt

具体使用文档和下载说明请移步 https://rtyley.github.io/bfg-...

读到这发现正文终于要开始了,但GitHub提供的信息仍旧是看不懂,好在BFG托管在GitHub上,在官网上下载bfg.jar,安装 Java 环境,好在Java环境的安装非常简单,我就不在此说明了。

我们接下来开始删除数据

首先克隆你的项目,并使用 --mirror

$ git clone --mirror git://example.com/repo.git

克隆完后接着就可以执行之前下载的bfg.jar,将jar放到克隆项目后的文件夹内,和repo.git(此处项目名会不同)同级,YOUR-FILE-WITH-SENSITIVE-DATA是你包含敏感信息的文件名,不用写明路径:

java -jar bfg.jar --delete-files YOUR-FILE-WITH-SENSITIVE-DATA repo.git

执行结束后会出现如下结果

消除GitHub上的历史记录

进入到repo.git下,我们还需执行git gc命令:

cd repo.git

$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

最后,我们将修改结果提交:

$ git push

理论上到这已经是清除掉记录了,我的提交记录确实变了,但是还是能找到某些羞羞的数据,因为之前在第一步的时候将这个文件给删掉了,于是又把文件提交到仓库,然后在执行上述步骤,终于危机解除,英雄又一次拯救了世界,散花之前注意到还有执行完jar之后最后有三行文字,让我在复现一下。

消除GitHub上的历史记录

最后撒花。

使用 filter-branch

由于使用filter-branch还需要提交删除请求,毕竟要解释删除的数据是干嘛的(捂脸),况且BFG自称速度是filter-branch的10~720倍。感兴趣的同学可以了解一下。

以下是数据移除策略的部分内容,官方列举了什么是敏感数据以及一些注意事项,以及解释了GitHub如何移除这些数据,还有 如何发送移除数据请求以及请求内容应包含事项 (下图)等。

消除GitHub上的历史记录

图中的大概意思是:

发送一份删除敏感数据的请求

由于连接GitHub主机的内容以及管理方式的不同,我们需要你提供的信息越具体越好,为了确保我们核实用户并能够彻底移除敏感数据,我们需要知道从哪开始。

以下几点简单说明了移除敏感数据的步骤。

你的请求内容应该有:

  1. 每一个包含敏感数据的文件都有一个能正常指向该文件的链接。(注意,GitHub不能通过搜索结果,示例以及截屏来处理你的请求)
  2. 详细说明你的每个文件中敏感数据所在的行数。
  3. 简要描述敏感信息可能带来的风险, 并且着重说明它是如何产生安全风险的
  4. 如果你是第三方或者其他代理机构所面临安全风险,请提供合法的授权表明你有执行权利。
  5. 可选项:让GitHub知道在删除数据请求前所面临的紧急情况和原因,我们会尽快处理你的删除请求;如果你的请求对时间敏感性有特殊的要求,例如公开最近的凭证等,请做出解释。

如何提交请求

你可以将删除请求发送到 support@github.com 或者通过GitHub的 Contact form 提交,请在邮件正文中包含一份纯文本格式的请求,邮件携带附件的话可能会存在处理延迟。


以上所述就是小编给大家介绍的《消除GitHub上的历史记录》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Ruby

Programming Ruby

Dave Thomas、Chad Fowler、Andy Hunt / Pragmatic Bookshelf / 2004-10-8 / USD 44.95

Ruby is an increasingly popular, fully object-oriented dynamic programming language, hailed by many practitioners as the finest and most useful language available today. When Ruby first burst onto the......一起来看看 《Programming Ruby》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具