運営者:そうすけ
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 clone
やgit init
でローカルに新しいリポジトリを作成するとき。git add
でファイルをステージングするとき。git commit
で変更をコミットするとき。git push
やgit pull
でリモートリポジトリとの同期を行うとき。
注意点
この設定自体は一般的なGit操作に問題を引き起こすものではありません。
しかし、セキュリティ上の懸念があるため、慎重に使用する必要があります。
通常、file
プロトコルはローカルでの操作に利用されるものであり、通信の暗号化や認証がないため、セキュリティ上のリスクが考えられます。特に、信頼された環境以外でこの設定を変更することは避けた方が良いでしょう。
- 信頼された環境でのみ使用する: 特にセキュリティが重要な環境では、信頼されたネットワーク内でのみこの設定を有効にするべきです。
- リモートリポジトリのセキュリティ: もしリモートリポジトリがローカルネットワーク内でのみアクセス可能である場合、
file
プロトコルを使用することはセキュリティ上のリスクが少ないです。 - ファイルのアクセス権: リモートのリポジトリにアクセスするためのファイルのアクセス権が適切であることを確認してください。
コメント