🤯

git-czでunknown error occurred while reading the configuration files

2023/11/24に公開

と言われる話。

概要

最近ジョインされた案件でgit-cz( https://github.com/streamich/git-cz )を用いてコミットメッセージをある程度統一している。
とうとう初コミット!としようとしたらうまくいかなかったので備忘録がてら記載。

環境

  • Vue + Laravelで構成されたWebサイト
  • Dockerを使って構築
    • [プロジェクト名] の中にいくつかのコンテナが入っており、その中の [コンテナ名] でgit-czを使いたい
  • git-czはDockerコンテナ先で実施される(コマンド後述)

コマンドとエラー

コマンド

docker exec -it [コンテナ名] ./node_modules/.bin/git-cz 

エラー

Command failed: git diff --no-ext-diff --name-only && git diff --no-ext-diff --cached --name-only
fatal: unknown error occurred while reading the configuration files

原因

PCのgitの設定がDocker上に伝わっていなかった

解決策

一旦

docker-compose -f docker-compose.yml -p [プロジェクト名] rm -f

をしてコンテナを削除、
PCでgitの設定をして

git config --global user.name [GitHubのユーザー名]
git config --global user.email [GitHubのメールアドレス]

再度コンテナを作成、立ち上げる

docker exec -it [コンテナ名] composer install
docker-compose -f docker-compose.yml -p [プロジェクト名] up -d

詳細

⚠️インフラ周りを把握できていない部分があるので薄い知識で書いてます

今回のDockerの作成方法的にPCで作ったgitの設定ファイル ~/.gitconfig を参照するっぽい
→ 一番初めにコンテナの作成をしたときにそのファイルがなかったので ~/.gitconfig/ ディレクトリが作られ、それをDocker内でも参照しようとしていた
→ けどもちろん設定されていないし尚更ディレクトリだしてエラーになっていた

※ Dockerの停止→立ち上げをしても作成した段階でディレクトリをして参照してしまっていたので
コンテナを削除せずにgit設定追加→立ち上げをすると「ディレクトリじゃないんだけど???」というエラーになってしまっていた

特にハマった点

  • これまではすでに ~/.gitconfig を作成済みのメンバーがジョインしていたので他メンバーの再現性がなかった
  • Dockerを停止すればPCから参照する設定ファイルの記憶が消えると思っていた

おまけ - その他やってみたこと

補足

解決策の他にやってみたけど効果がなかったものなど。

PCにgit-czのインストール

git-cz --version
zsh: command not found: git-cz

だったので

yarn global add git-cz
git-cz --version
4.8.0

これはやってみたけどエラーに改善が見られなかった
(そもそもDockerでの作業だからそれはそうって言われたらそうなんだけど)

git configの後にコンテナ再起動

git config --global user.name [GitHubのユーザー名]
git config --global user.email [GitHubのメールアドレス]
cat ~/.gitconfig                     

// 以下のようになっていることを確認
[user]
        name = [GitHubのユーザー名]
        email = [GitHubのメールアドレス]

でDockerを停止→立ち上げる
と↓のエラーが出た

Error: (HTTP code 400) unexpected - failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/host_mnt/Users/[ユーザー名]/.gitconfig" to rootfs at "/etc/gitconfig": mount /host_mnt/Users/[ユーザー名]/.gitconfig:/etc/gitconfig (via /proc/self/fd/9), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

これは前述の通り、一旦ディレクトリのつもりで設定されてしまった~/.gitconfig/を探しているからファイルの形で来てエラーになっているみたい。

※ .gitconfigファイルを作ったことがミスではなく、作ったときに再起動しかしていないのがよくなかった

Discussion