🛤️

git-secretsの設定がcommitを邪魔する時の対策を段階的にまとめてみた

2021/06/14に公開

背景

Sourcetreeで初めてcommitしようとしたとき、以下のエラーが出現しました。

git: 'secrets' is not a git command. See 'git --help'.

調べてみると、このエラーメッセージにあるsecretsとはgit-secretsのことであることが判明。結構な時間を犠牲に色々な対策を試してみた結果、ようやくcommitができるようになりました。

そこでこの記事では、

git-secretsの設定によりgitの操作が上手くいかない時の対策を、

試すべき優先度の高いと感じたものから段階的にまとめました。

前提知識

git-secretsとは?

https://github.com/awslabs/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段階: gitgit-secretsのパスを揃える

今回のエラーはSourcetreeというGitクライアントの管理下で起こる事が多いようです。
その原因としてgitgit-secretsのパスが異なる事、もしくはSourcetreeに組み込みのGitが初期設定されているという事が挙げられます。

この問題を解決するためには以下の記事が参考になりました。

https://dev.classmethod.jp/articles/startup-git-secrets/#toc-sourcetree

目次から"Sourcetreeでも使ってみる"という段落に一通りの手順がまとめてあります。
(※ちなみにZennを運営されているClassmethodさんの記事。情報量すごい。)

これでも解決しない場合は第3段階へ。

第3段階: SIPを無効化して、git-secretsをリンクさせる

この段階は結構時間がかかりました。
SIPとはSystem Integrity Protectionのことで、MacOSにあるバージョン以降から導入されたセキュリティ対策の機能です。これによってgitのあるフォルダへのアクセス権限が制限されてしまっているので、SIPを一旦無効にしてgit-secretsをリンクします。詳しい手順は以下の記事を参考にしてください。

https://qiita.com/yamaryu0508/items/d959dc32442b08b8a0a4#system-integrity-protectonsipを無効にする

ここまで試してまだ解決できない場合は最終段階へ。

最終段階: git-secretsによるバリデーションをスキップする

これはgitでcommitをするための応急処置的な対策です。

https://github.com/awslabs/git-secrets#skipping-validation

以上の公式の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