三种清除Git提交历史的方法

在项目实际开发过程中,可能由于工作的原因,上传了一些敏感信息,例如测试的账户名与密码,但是后续的工作有需要将项目公开,为了避免信息泄露,那么必须清除Git的提交历史记录,经过测试,大致可以采用如下三种方法。

在这里再次强调一次,现在有很多工具与方法从git的提交历史中爬取敏感信息,所以,即使是删除了原有的文件内容,信息依旧会泄露,例如邮箱密码、登陆密码等。有人可能觉得这些密码泄露了也不要紧,但是你想过了这些密码与你其他账户密码的关联性了吗?所以,一定要时时刻刻保护好自己的敏感数据,说得严重点,你还可能因为自己的一时疏忽而违法,至于因为疏忽丢工作,那时常见的事。

请参见刑法第二百五十三条

国家机关或者金融、电信、交通、教育、医疗等单位的工作人员,违反国家规定,将本单位在履行职责或者提供服务过程中获得的公民个人信息,出售或者非法提供给他人,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金。

1. 采用filter-branch命令

这是网上推荐使用最多的一种方法,具体请参见《Git如何永久删除文件(包括历史记录)》,但这种方法有一个致命的问题,那就是慢,并且非常慢,一般一个提交记录在百次左右的项目,完整执行所有的操作,至少需要一天,并且不方便的地方还在于,需要一个一个地列举所有的文件(可以使用批处理),依次进行操作。

所以,这种方法只适用于清除单个文件的提交历史,并且必须知道所有的文件名。

2. BFG Repo-Cleaner工具

这是来自segmentfault的回答,原文参见《因累积太多无法提交到 github,如何清除历史变更记录?》,工具的安装地址是“https://rtyley.github.io/bfg-repo-cleaner/”,是第一种方法的极大补充。

3. 最直接、暴力与简单的方法

这也是我强烈推荐的,因为暴力、直接、简单,假定原有的远程仓库为A,操作分为四步:
1. 新建另一个远程仓库,命名为B;
2. 将现有的本地代码提交到远程仓库B;
3. 删除现有的远程仓库A;
4. 将远程仓库B命名为A;

结论

清除所有Git版本历史,我认为最简单的方法来自于第三种。

你可能感兴趣的:(代码管理)