Visual Studio CodeのDev Containers 機能拡張は、ホストの.gitconfigを自動でコンテナ内にコピーしてくれる親切機能を持っている。
しかしそれが仇となり、コンテナ内部ではgitがうまく動かないことがある。
そういう時はDev Containers 機能拡張の設定でなんとかなるかもしれない。
Dev › Containers: Copy Git Configをoffにし、Extensions → Dev Containers → Dotfiles: Repositoryに.gitconfigを含んだリポジトリを指定する。
Dev Containers 機能拡張を使う人は注意されたし。
コンテナ内のgitが全然動かず半日を溶かしてしまった。
調べていくと、/root/.gitconfigにホスト側の~/.gitconfigとほぼ同じ内容が設定されていることがわかった。
一体なぜなのか。
さらに調べると、Visual Studio CodeのDev Containers 機能拡張がホストの.gitconfigを自動でコンテナ内にコピーしてくれるらしい。
そのおかげで"箱から出してすぐ動く"とのことだが、全然動かなかったよ、私は…
The extension will automatically copy your local .gitconfig file into the container on startup so you should not need to do this in the container itself. https://code.visualstudio.com/docs/devcontainers/containers#_sharing-git-credentials-with-your-container
この自動でのコピーはこの設定(Dev › Containers: Copy Git Config)でoffにできる:

そこでこの設定をoffにしてコンテナをリビルドすると無事gitが動くようになった。
しかしほとんどの項目が設定されてない(credential.helperのみ設定されている)ため、これはこれでそのままは使えない。
そこで Dev Containers用のdotfilesリポジトリを作り、.gitconfigを入れて、Extensions → Dev Containers → Dotfiles: Repositoryの設定から指定:
こうすると、Dev Containers機能拡張は.gitconfigをすこし書き換えてコンテナ内にコピーしてくれる。(書き変わったのはおそらくcredential.helperのみ)
macユーザなど、ホストと開発用コンテナの環境が大きく異なる人で、gitの設定をバリバリカスタマイズしている人はこういう設定をすると良いかも。知らんけど。
original thread: https://twitter.com/acevif/status/1603785973547945986?s=20&t=jsML-FW-jAzgBhMipwwsrA
