試した環境
本題
Git では version 2.35.2 からユーザとディレクトリの所有者とを確認して、特定の条件ではそのディレクトリ下で Git の諸々のコマンドの使用が制限される機能が追加されました。
制限の対象になるディレクトリ下でgit add
やgit commit
などのコマンドを使うには、以下のようにGitの設定のsafe.directory
に対象ディレクトリを追加する必要があります。
git config --global --add safe.directory F:/test
この機能制限の対象になるディレクトリについて、私は外付けHDDやSSDのディレクトリが対象になるのだと思っていました。
しかしファイルシステムを NTFS にすればUSBメモリ上のリポジトリでも機能制限の対象にならないようです。
NTFS はディレクトリの所有者情報を持ち、FAT32, exFAT はディレクトリの所有者情報を持たないファイルシステムなのが理由だと思います。
ファイルシステムにあまり詳しくないので違っていたらごめんなさい。
従って、 Git で safe.directory の設定をせずに外付けディスク上でリポジトリを扱いたいならファイルシステムを NTFS にするといいのですが、ファイルシステムを変更するにはディスクのフォーマットをする必要があります。
既にディスクにファイルを展開している場合は取り返しのつかないことにならないように注意してください。
NTFS での実験
まず NTFS で試します。 ドライブやディレクトリのプロパティにセキュリティタブがあります。
git init
でリポジトリを作成すると、デフォルトの git bash ではブランチ名(master)がカレントディレクトリの後に表示されます。
USER@HOST MINGW64 /f/test $ git init Initialized empty Git repository in F:/test/.git/ USER@HOST MINGW64 /f/test (master) $ ls -al total 8 drwxr-xr-x 1 USER 197121 0 Sep 19 10:48 ./ drwxr-xr-x 1 USER 197121 0 Sep 19 10:47 ../ drwxr-xr-x 1 USER 197121 0 Sep 19 10:48 .git/
そしてgit add
やgit commit
コマンドも問題なく行えます。
USER@HOST MINGW64 /f/test (master) $ touch test.txt USER@HOST MINGW64 /f/test (master) $ git add test.txt USER@HOST MINGW64 /f/test (master) $ git commit -m 'test' [master (root-commit) f34ace4] test 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.txt
FAT32, exFAT での実験
次にFAT32, exFAT で試します。 両方試しましたが、同じ結果だったので1つにまとめます。 プロパティを見ると NTFS にはあったセキュリティタブがありません。
機能制限下でもgit init
コマンドは使用可能のようです。
ただし、NTFS ではカレントディレクトリの後に表示されていたブランチ名(master)が、FAT32, exFAT では表示されません。
USER@HOST MINGW64 /f/test $ git init Initialized empty Git repository in F:/test/.git/ USER@HOST MINGW64 /f/test $ ls -al total 0 drwxr-xr-x 1 USER 197121 0 Sep 18 11:54 ./ drwxr-xr-x 1 USER 197121 0 Jan 1 1980 ../ drwxr-xr-x 1 USER 197121 0 Sep 19 10:09 .git/
git add
コマンドでファイルを追加しようとすると、リポジトリに疑わしい所有者を見つけたことと所有者が記録されないファイルシステムのディレクトリである旨のメッセージを表示して失敗します。
USER@HOST MINGW64 /f/test $ touch test.txt USER@HOST MINGW64 /f/test $ git add test.txt fatal: detected dubious ownership in repository at 'F:/test' 'F:/test' is on a file system that doesnot record ownership To add an exception for this directory, call: git config --global --add safe.directory F:/test
Gitの設定のsafe.directory
に対象ディレクトリを追加すればカレントディレクトリの後にブランチ名(master)が表示され、git add
やgit commit
コマンドが使えるようになります。
USER@HOST MINGW64 /f/test $ git config --global --add safe.directory F:/test USER@HOST MINGW64 /f/test (master) $ git add test.txt USER@HOST MINGW64 /f/test (master) $ git commit -m 'test' [master (root-commit) 8773d01] test 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.txt
参考
https://git-scm.com/docs/git-config/#Documentation/git-config.txt-safedirectory
執筆時点での最新版の git ドキュメントは、本機能が追加されたgit 2.35.2 のキュメントと比較すると内容に追加があります。