1. unsafe repository エラーの通知例
1.1. 外部ストレージに置かれたローカルリポジトリにアクセス
1 2 3 4 5 6 |
> cd E:\USO_800 > git status fatal: unsafe repository ('E:/USO_800' is owned by someone else) To add an exception for this directory, call: git config --global --add safe.directory E:/USO_800 |
1.2. WSL(Windows Subsystem for Linux)内にある仮想ドライブのローカルリポジトリにアクセス
1 |
'git status' がコード 128 で終了しました: fatal unsafe repository ('//wsl$/Ubuntu/home/...') |
1.3. 自分以外にOwnershipがあるフォルダーに置かれたローカルリポジトリにアクセス
1 2 3 4 5 |
$ git status fatal: unsafe repository ('/var/www' is owned by someone else) To add an exception for this directory, call: git config --global --add safe.directory /var/www |
2. unsafe repository エラーの原因
git の脆弱性対策。
悪意を持った第三者がネットワーク共有ドライブや外部ストレージ(USBメモリなど)などに置かれた ローカルリポジトリ ( .gitフォルダ ) を改竄して、gitクライアントに任意のコマンドを実行させる脆弱性が発見された。そこで第三者による改竄可能なフォルダに置かれた .gitフォルダ を不用意に開いてしまわないように制限がかけられた。gitの設定(git config)で明示的に指定された安全な .gitフォルダ に限り開くことができる。
3. unsafe repository エラーの発生条件
- 『外部ストレージ(USBメモリなど)』に置かれた .gitフォルダ (ローカルリポジトリ)を含むワークフォルダにgitコマンドでアクセスしようとした。
- 『ネットワークドライブ』に置かれた .gitフォルダ を含むワークフォルダにgitコマンドでアクセスしようとした。
- Windowsアプリ(たとえば SourceTree)から『仮想ネットワークドライブ (
\\wsl$
) 経由』でWSL(Windows Subsystem for Linux)の中の .gitフォルダ を含むワークフォルダにアクセスしようとした。 - UNIX系OSにおいて、自分以外にownershipがあるリポジトリにアクセスしようとした。
- 第三者が改竄できる場所に .gitフォルダ を置かない。
- 第三者が改竄できない場所に .gitフォルダ を移動/複製する。
- ただし、移動/複製の前に改竄されていれば、gitの脆弱性を突破されるリスクがある。
4. unsafe repository エラーの解決方法
4.1. ベストな解決方法:第三者が改竄できる場所に .gitフォルダ を置かない
4.2. ベターな解決方法:安全なフォルダ(ディレクトリ)として設定する
たとえば、WSL (Windows Subsystem for Linux) の中のフォルダを移動することは現実的ではなく、第三者による改竄リスクは小さいため、個別に安全なディレクトリ safe.directory として指定することで gitコマンドのアクセス制限を回避できます。
4.2.1. git configコマンドで設定する
1 |
git config --global --add safe.directory '%(prefix)///wsl$/Ubuntu/home/your_name/your_project' |
4.2.2. .configを直接編集する
1 2 3 |
# .gitconfig [safe] directory %(prefix)///wsl$/Ubuntu/home/your_name/your_project |