101
109

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Git】機密情報を含んだディレクトリを誤ってリモートリポジトリにプッシュしてしまった場合の対処方法

Last updated at Posted at 2023-04-21

似たような記事が100本以上ありそうですが、駆け出しエンジニア(死語?)向けにあらためてまとめました。

状況設定

説明のため、以下のような状況を考えます。

  • Serverless Frameworkデプロイ時に生成される.serverlessというサブディレクトリ内のファイルに、APIキーの情報が含まれてしまった。
  • .serverlessサブディレクトリは本来Git管理すべきではないのに、誤ってリモートリポジトリにプッシュしてしまった。
  • git-flowによるブランチ管理を行っており、複数のfeatureブランチも存在している。

手順1: 該当ディレクトリをGit管理から外す

git-flowのため、最新のdevelopブランチからfeatureブランチをきります。
このfeatureブランチで、.serverlessディレクトリを削除します。

git rm -r --cached .serverless

.gitignoreファイルに.serverlessを追加して、将来のコミットでこのディレクトリが無視されるようにします。

echo ".serverless" >> .gitignore

変更をコミット後、リモートプッシュしてdevelopにマージします。
最新developを作業中のfeatureブランチにマージして、同様に.serverlessをGit管理から外します。
※この操作を忘れてしまうと、featureを最新developにマージした際、.serverless.gitignoreが元に戻ってしまいます。

あとはgit-flowにのっとって、develop -> staging -> mainの順にマージすれば、アクティブなブランチから.serverlessがなくなります。

手順2: git-secretsの導入

すべての開発メンバーにgit-secretsを導入してもらいます。
git-secretsによって、機密情報が含まれたコミットがプッシュされる前に、検出とブロックが行われます。
※本来は、開発者がリポジトリをクローンしたときに導入するものです。

まずは、すべての開発メンバーにgit-secretsをインストールするように指示します。
インストール方法はプラットフォームによって異なります。

# macOS
brew install git-secrets

# Linux
git clone https://github.com/awslabs/git-secrets.git
cd git-secrets
make install

メンバー各自で、ローカルリポジトリで次のコマンドを実行し、git-secretsを有効化します。

cd <your_repository>
git secrets --install
git secrets --register-aws

通常、git-secretsはインストール時にグローバル設定として有効化されます。
そのため、新しいfeatureブランチを作成する際にgit-secrets --installgit secrets --register-awsを再実行する必要はありません。

手順3: リモートリポジトリにある非アクティブなブランチの削除

リモートブランチに無駄に残ってしまっているブランチを忘れずに削除しましょう。

手順4: 過去のコミット履歴から機密情報を削除する

git filter-branchを使用して、機密情報が含まれる過去のコミットを書き換えます。

git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch .serverless' --prune-empty --tag-name-filter cat -- --all

.serverlessディレクトリが含まれるすべての過去のコミットから、そのディレクトリを削除します。
他の開発者のリポジトリには影響しないため、リモートリポジトリに強制プッシュする必要があります。

git push origin --force --all
git push origin --force --tags

※BFG Repo-Cleanerのようなツールでも同様の操作ができるみたいです。

101
109
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
109

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?