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) |
第1段階: git-secretsをインストール
まず第一の原因としてgitのconfigファイルにgit-secretsに関する記述があるにも関わらず、git-secrets本体が導入されていない可能性があります。
そこで、Homebrewを用いてgit-secretsをインストールしてみます。
brew install git-secrets
既にインストールされていて、解決しない場合は第2段階へ。
第2段階: gitとgit-secretsのパスを揃える
今回のエラーはSourcetreeというGitクライアントの管理下で起こる事が多いようです。
その原因としてgitとgit-secretsのパスが異なる事、もしくはSourcetreeに組み込みのGitが初期設定されているという事が挙げられます。
この問題を解決するためには以下の記事が参考になりました。
目次から"Sourcetreeでも使ってみる"という段落に一通りの手順がまとめてあります。
(※ちなみにZennを運営されているClassmethodさんの記事。情報量すごい。)
これでも解決しない場合は第3段階へ。
第3段階: SIPを無効化して、git-secretsをリンクさせる
この段階は結構時間がかかりました。
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