如何在git commit history中删除敏感数据(API_KEY)?

时间:2016-11-29 12:02:01

标签: android git github gradle

我完成了一个需要我使用api_key的android项目。 我在build.gradle文件中添加了api密钥,如下所示:

     buildTypes.each {
         it.buildConfigField "String", "MDB_API_KEY", "\"243248324293938243\"" 
     }

(那是一个随机数btw)

现在我完成了项目,我需要将其上传到Github,以便进行代码审查。在这之前,我被要求删除api密钥,我做了

buildTypes.each {
     it.buildConfigField "String", "MDB_API_KEY", *putYaOwnApiKeyBrothar*
         }

并承诺。

但是,如果我将所有内容都推送到Github,他们可以访问任何较旧的提交,并检索我的api_key。

我看过类似的问题,解决方案似乎是git filter-branch,但它似乎在提交历史记录中删除了特定的文件。  我只想删除(或那条线),因为我想在所有提交中使用* putYaOwnApiKeyBrothar *代码。 (如果他们必须检查较旧的那个)。

这甚至可能吗?有一个简单的方法吗? 如果没有,我该怎么办? 我傻了吗?

2 个答案:

答案 0 :(得分:3)

git filter-branch 的方法。它有各种过滤器,您可以从历史记录中删除文件,但您也可以根据需要修改文件。在您的情况下,您希望将--tree-filter选项与替换文件中的String的命令一起使用。像git filter-branch --tree-filter "sed -i 's/243248324293938243/putYaOwnApiKeyBrothar/' your/file/here" --tag-name-filter cat --all

这样的东西

(如果你在macOS(或任何* BSD)上添加'' after sed -i

答案 1 :(得分:0)

git filter-branch为我工作:

 git filter-branch --tree-filter "sed -i "" 's/ENTER_API_KEY_TO_REMOVE/STRING_TO_REPLACE_THE_KEY/' filepath"

文件路径应包含先前存储密钥的文件名,例如/src/main/Application.java。 当您尝试将这些更改推送到GitHub时,它们可能会被拒绝,在这种情况下,请使用:

git push --force