git-secrets Argument list too long コミット できない

新しいアプリを立ち上げようとrails newした。そして作ったアプリのレポジトリをGit hubにあげようとしたらエラーが出た。

$ git commit -m "first commit"
$ /usr/local/bin/git-secrets: line 109: /usr/local/Cellar/git/2.19.0_1/libexec/git-core/git: Argument list too long

 どうもAWSのパスワードとかが流出しないよう監視してくれるgit-secretsが悪さしている気がする。

 

 Argument list too long について調べてみると、mvで一度に大量のファイルの移動をしたり、Git rmなどで大量のファイルを削除しようとするときに、引数が大きすぎるから拒否されるためにでるらしい。そういう時は処理を分割してやってくれるコマンドがあるという。

<参考>

https://qiita.com/SShayashi/items/1fef1bb11439891a5e2c

https://blog.shnr.net/?p=496

https://utano.jp/entry/2018/08/solution-for-mv-error-argument-list-too-long/ 

 

 しかし今回はそうじゃない。First commitの時に引数が大きすぎて拒否されている。

どうやらGemをbundle installしたためファイルがたくさんあって、それが原因になっている。そんなの当たり前じゃないか。いままでそんなこと起きたことないぞ?

 

<試したこと> 

●git-secretsの記述を削除してからコミット

 私は以前AWSにデプロイしたりしていて、そのときに新たに作るアプリケーションには自動でgit-secretsがinstallされるように設定していた。↓↓

$ git secrets --install ~/.git-templates/git-secrets
$ git config --global init.templatedir '~/.git-templates/git-secrets'

 このために新しいアプリがgit-secretsの影響を受けた。とりあえず、この新しいやつからgit-secretsをアンインストールしてみっかと git secrets --uninstall と打ってみたが、そんなコマンドは存在しないと言われた。え、導入はさせるが排出させる気はないのか…

 HomebrewからPCに入ってるgit-secretsをRemoveすることはできるみたいだが、とりあえず今回はこの新規アプリからだけ機能を削除してみた。

 

https://piruty2.hatenablog.jp/entry/%3Fp%3D521

 git-secretsの削除を調べていて出てきたこの記事を参考にすると、各アプリのディレクトリに隠しフォルダとして.git/hooksがあり、その中にgit-secretsを実行させるファイルがあるようだ。

$ cd .git
$ ls
COMMIT_EDITMSG HEAD hooks objects FETCH_HEAD config index refs
$ cd hooks
$ ls
commit-msg pre-commit prepare-commit-msg

 このhooksの中身を削除しました。

$ rm commit-msg

$   rm   pre-commit

$   rm   prepare-commit-msg

 これでとりあえずこのアプリをgitにあげる時にgit-secretsは作動しなくなる。

 この状態でコミットを実行したら何なくできました。やはりgit-secretsがひっかかってた。なんだろう、引数が多すぎると監視しきれなくなっちゃうのかな?

 最初のコミットはできたので、あらためてアプリのディレクトリでgit-secret installし直しておきました。とりあえずこれで初回だけgit-secretsをスルーすることができました

 

●毎回この手順踏むのはよくないと思う

 この手順はどう考えてもイレギュラーだろう。他にスマートな方法はないのか。

 調べました。

 ありました。

https://qiita.com/jqtype/items/9196e047eddb53d07a91

https://mistymagich.wordpress.com/2015/12/04/git%E3%81%AEhook%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97/

 

$ git commit --no-verify

 このオプションをつければhooksに入っているファイルの作業を飛ばしてコミットができる。

 これやると、vimでコミット名を打ち込めと出るので、i でインサート開いて、コミットタイトルをいれてescキーからの:wqで、コミットが始まる。

 コミットが完了したら、

$ git push -u origin master

 でプッシュして完了。できた。

 

 前までこんな手続き踏まずにFirst commitできていたのに、なんかできなくなってやな感じ。git-secretsの入れ直ししてみようかしら。そしたらこの記事更新しよう。

 

 はぁ備忘備忘。