2016-11-29 3 views
0

私はapi_keyを使用する必要があるアンドロイドプロジェクトを終了しました。 私はこのように私のbuild.gradleファイルにAPIキーを追加しました:git commit historyを介して機密データ(API_KEY)を削除するには?

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

私は、私はGitHubのにアップロードする必要があるプロジェクトを終了したことを今

(つまりところで乱数です)コードレビュー。その前に、私はAPIキーを削除するように頼んだので、私はした

コミットしました。

しかし、すべてをGithubにプッシュすると、古いコミットにアクセスしてapi_keyを取得できます。

似たような質問がありましたが、解決策はgit filter-branchと思われますが、コミット履歴全体で特定のファイルが削除されたようです。 のキー(またはその行については、私はすべてのコミットで* putYaOwnApiKeyBrothar *コードを使用できるようにしたいので削除します)。 (古いものをチェックする必要がある場合)。

これは可能ですか?簡単な方法はありますか? そうでない場合は、どうすればよいですか? 私は愚かではないですか?

+0

あなたはまた、APIキーを無効にし、新しいものを取得する必要があります。 – Thilo

+0

apiキーをプッシュした古いコミットを 'rebaseする 'と編集することで可能ですが、これはあなたが正しくプッシュした単一のコミットでなければならないと思いますか? – Deep

+0

私はまだgithub(または他のサーバー)に何もプッシュしませんでした。最初のコミットの1つにapi_keyを設定し、私のコミット(50以上)のすべてに伝播しました。また、私はgitであまり経験がないので、私は 'rebase'でそれを行う方法を知りません。 api_keyを持たない唯一のコミットは最後のものです(と私が思う最初の2つ) – 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

ような何か(あなたがMacOSの(または任意の* BSDの上にある場合)'' after sed -iを追加)

+0

私はあなたが言ったことを試しましたが、コマンドは実際に動作していないようです。私はあなたのsedコマンドをsed -i '' s/blablaに変更しました。(空の-iパラメータを追加しています)sed(実行中のos x)のbsdバージョンを持っていますが、まだ動作しません。私はあなたのコマンドを実行し、自分のapiキーとapp/gradle.build(絶対パスで試してみた)ファイルで置き換えると、端末はdquote(mode)に入ります。私はgitであまり経験がありませんので、git filter-branchを正しく使う方法を理解するのは苦労しています。 – onVal

+0

さて、私はそれを動作させることができました!ヒントをありがとう!コマンドは: 'git filter-branch --tree-filter" sed -i "" '/ 243248324293938243/putYaOwnApiKeyBrothar /' app/build.gradle "HEAD"でした。 (Linuxの場合は-iの後の ""はおそらく必要ありません) – onVal

関連する問題