git-secretsの設定がcommitを邪魔する時の対策を段階的にまとめてみた
背景
Sourcetreeで初めてcommitしようとしたとき、以下のエラーが出現しました。
git: 'secrets' is not a git command. See 'git --help'.
調べてみると、このエラーメッセージにあるsecrets
とはgit-secrets
のことであることが判明。結構な時間を犠牲に色々な対策を試してみた結果、ようやくcommitができるようになりました。
そこでこの記事では、
git-secrets
の設定によりgit
の操作が上手くいかない時の対策を、
試すべき優先度の高いと感じたものから段階的にまとめました。
前提知識
git-secrets
とは?
git-secrets
は、機密情報を含むcommitが実行されないようにcodesを検証してくれる安保ツールです。AWSへのアクセクキーなどがパブリックに上がってしまうとそれを悪用されるケースがある事からこのようなツールが開発されました。
環境設定
環境 | バージョン |
---|---|
MacOS | Big Sur Version 11.1 |
Sourcetree | Version 4.1.1 |
Git | Version 2.24.3 (Apple Git-128) |
git-secrets
をインストール
第1段階: まず第一の原因としてgitのconfigファイルにgit-secrets
に関する記述があるにも関わらず、git-secrets
本体が導入されていない可能性があります。
そこで、Homebrewを用いてgit-secrets
をインストールしてみます。
brew install git-secrets
既にインストールされていて、解決しない場合は第2段階へ。
git
とgit-secrets
のパスを揃える
第2段階: 今回のエラーはSourcetreeというGitクライアントの管理下で起こる事が多いようです。
その原因としてgit
とgit-secrets
のパスが異なる事、もしくはSourcetreeに組み込みのGitが初期設定されているという事が挙げられます。
この問題を解決するためには以下の記事が参考になりました。
目次から"Sourcetreeでも使ってみる"という段落に一通りの手順がまとめてあります。
(※ちなみにZennを運営されているClassmethodさんの記事。情報量すごい。)
これでも解決しない場合は第3段階へ。
git-secrets
をリンクさせる
第3段階: SIPを無効化して、この段階は結構時間がかかりました。
SIPとはSystem Integrity Protectionのことで、MacOSにあるバージョン以降から導入されたセキュリティ対策の機能です。これによってgit
のあるフォルダへのアクセス権限が制限されてしまっているので、SIPを一旦無効にしてgit-secrets
をリンクします。詳しい手順は以下の記事を参考にしてください。
ここまで試してまだ解決できない場合は最終段階へ。
git-secrets
によるバリデーションをスキップする
最終段階: これはgitでcommitをするための応急処置的な対策です。
以上の公式のReadmeにも記載されているオプションを利用します。
--no-verify
オプション
上記のオプションをcommit
もしくはmerge
に付随させることで、git-secrets
による検証を無効化する事ができます。
例
git commit -m "バリデーションをスキップ" --no-verify
この操作によってgit
コマンドを実行するときにgit-secrets
が走らなくなります。
ただこれではgit-secrets
の恩恵を受けることができません。AWSを利用する場合は、これ以前の段階で問題を解決しておきたい所です。
SOTD (Summary Of The Day)
自分が問題を解決するのに、まず第三者の書いた記事やブログなどを探していましたが、結局git-secrets
公式のリポジトリページから今回のエラーを(とりあえず)解決する事ができました。
Discussion