2016-11-29 109 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

相關問題