Git で safe.directory の設定をせずに外付けディスク上でリポジトリを扱いたいならファイルシステムを NTFS にする

試した環境

本題

Git では version 2.35.2 からユーザとディレクトリの所有者とを確認して、特定の条件ではそのディレクトリ下で Git の諸々のコマンドの使用が制限される機能が追加されました。 制限の対象になるディレクトリ下でgit addgit 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 addgit 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 addgit 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 のキュメントと比較すると内容に追加があります。