2016-11-29 49 views
0

我完成了一个需要我使用api_key的android项目。 我已经添加了API密钥在我的build.gradle文件中像这样:如何在git commit历史记录中删除敏感数据(API_KEY)?

 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 *代码在我所有的提交中可用。 (如果他们必须检查一个较旧的)。

这可能吗?有一个简单的方法吗? 如果不是,我该怎么办? 我是否愚蠢?

+0

你也应该无效的API密钥,并获得一个新的。 – Thilo

+0

可以通过'rebasing'和编辑你已经推送api键的旧提交,我想这应该是一个单一的提交,你已经把它推到正确的位置? – Deep

+0

我没有推送任何东西给github(或任何其他服务器)。我在第一次提交中设置了api_key,并将其传播到我的所有提交(超过50次)。另外我对git不太熟悉,所以我不知道如何用'rebase'来做到这一点。唯一没有api_key的提交是最后一个提交(前两个我认为) – onVal

回答

3

git filter-branch要走的路。它有各种过滤器,您可以从历史记录中删除文件,但您也可以随意修改文件。在你的情况下,你想使用--tree-filter选项和一个替换文件中字符串的命令。喜欢的东西git filter-branch --tree-filter "sed -i 's/243248324293938243/putYaOwnApiKeyBrothar/' your/file/here" --tag-name-filter cat --all

(如果你是在Mac OS(或* BSD)添加'' after sed -i

+0

我试过了你说的,但是这个命令并没有真正起作用。我已经修改你的sed命令为sed -i''s/blabla ...(添加空-i参数),因为我有sed(运行os x)的bsd版本,但仍然无效。当我运行你的命令并用我自己的API键和app/gradle.build(甚至用绝对路径尝试)文件替换它时,终端进入> dquote(模式)。我对git不太熟悉,所以我很难理解如何正确使用git filter-branch。 – onVal

+0

好吧,我设法使它工作!感谢您的提示!命令是:'git filter-branch --tree-filter“sed -i”“'s/243248324293938243/putYaOwnApiKeyBrothar /'app/build.gradle”HEAD'。 (如果你在linux上,那么“after -i可能不需要) – onVal

相关问题