【Git】エラー fatal: transport ‘file’ not allowed でサブモジュール化できない

運営者:そうすけ


30代のブロガーとエンジニア。
工場勤務→情シス→ソフトウェアエンジニア
主にフロントエンド開発を行っています。

趣味はガジェットと植物

Git操作でのサブモジュール追加時のエラーです。

親ディレクトリから子ディレクトリをローカル環境でサブモジュール化したとき、下記のようなエラーが起こります。

$ git submodule add --force ./front_temp front
Cloning into 'C:/Users/mnbsou/Desktop/dev/docker/plants_demo_app_v2/front'...
fatal: transport 'file' not allowed
fatal: clone of 'C:/Users/mnbsou/Desktop/dev/docker/plants_demo_app_v2/front_temp' 
into submodule path 'C:/Users/mnbsou/Desktop/dev/docker/plants_demo_app_v2/front' failed
目次

解決策

下記コマンドを実行すれば解決しました。

git config --global protocol.file.allow always
$ git submodule add ./front_temp front
Cloning into 'C:/Users/mnbsou/Desktop/dev/docker/plants_demo_app_v2/front'...
done.

原因

git submodule add時に使用するgitのfileプロトコルが、configファイルでデフォルトで許可されていないから。

fileプロトコルは、通常のGit操作において、ローカルファイルシステム上でのリポジトリを操作する際に使用されます。

つまり、ローカルリポジトリを使用するときに動くプロトコルです。

git submodule addコマンドを使用してサブモジュールを追加するとき、指定したディレクトリの場所が相対パスや絶対パスである場合、Gitはそれをfileプロトコルとして解釈しようとします。

そして、その際にprotocol.file.allowの設定がないか、またはallowの値が制限的であると、エラーが発生することがあります。

これは、相対パスや絶対パスを指定してローカルディレクトリを操作すると、Gitが内部的にfileプロトコルを使用してそのディレクトリを処理するためです。

  • git clonegit initでローカルに新しいリポジトリを作成するとき。
  • git addでファイルをステージングするとき。
  • git commitで変更をコミットするとき。
  • git pushgit pullでリモートリポジトリとの同期を行うとき。

注意点

この設定自体は一般的なGit操作に問題を引き起こすものではありません。

しかし、セキュリティ上の懸念があるため、慎重に使用する必要があります。

通常、fileプロトコルはローカルでの操作に利用されるものであり、通信の暗号化や認証がないため、セキュリティ上のリスクが考えられます。特に、信頼された環境以外でこの設定を変更することは避けた方が良いでしょう。

  • 信頼された環境でのみ使用する: 特にセキュリティが重要な環境では、信頼されたネットワーク内でのみこの設定を有効にするべきです。
  • リモートリポジトリのセキュリティ: もしリモートリポジトリがローカルネットワーク内でのみアクセス可能である場合、fileプロトコルを使用することはセキュリティ上のリスクが少ないです。
  • ファイルのアクセス権: リモートのリポジトリにアクセスするためのファイルのアクセス権が適切であることを確認してください。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次