📌 3줄 요약
- 원인: 저장소 폴더의 소유자가 지금 Git을 실행한 사용자와 달라서 Git이 보안상 작업을 막았습니다.
- 해결: 오류 메시지 마지막 줄의
git config --global --add safe.directory 경로를 그대로 실행합니다. - 확인:
git config --global --get-all safe.directory에 경로가 보이고git status가 오류 없이 실행되면 됩니다.
⚠️ 이런 메시지가 떴다면
fatal: detected dubious ownership in repository at 'C:/projects/my-repo'
To add an exception for this directory, call:
git config --global --add safe.directory C:/projects/my-repo
Git 명령을 실행했더니 detected dubious ownership 오류가 나며 아무 명령도 듣지 않는 경우입니다. 대부분은 저장소 폴더를 만든 계정과 지금 Git을 실행한 계정이 달라서 생깁니다. 그 폴더를 믿을 수 있다면 아래 순서대로 예외 등록을 하면 됩니다.
저장소 폴더의 소유자가 다르면 Git이 작업을 막습니다
✅ 바로 해결
- Git Bash에서는 오류 메시지 마지막 줄에 나온 명령을 그대로 실행합니다:
git config --global --add safe.directory 경로. PowerShell에서는 경로에 작은따옴표 같은 특수문자가 있으면 PowerShell 문법에 맞게 다시 인용합니다. - 예약 작업처럼 다른 계정으로 도는 경우에는 그 계정 기준으로 등록하거나, 한 번만
git -c safe.directory=경로 명령으로 실행합니다.
왜 이 오류가 나나
Git 2.35.2(2022년 4월 보안 업데이트, CVE-2022-24765)부터 Git은 저장소 폴더의 소유자가 현재 사용자와 다르면 그 저장소를 쓰지 않습니다. 다른 사람이 심어 둔 .git 폴더의 설정이 내 PC에서 명령을 실행하게 만드는 공격을 막기 위해서입니다. 그 무렵의 버전에서는 같은 상황이 fatal: unsafe repository ('경로' is owned by someone else)라는 문구로 나왔습니다.
윈도우용 Git은 오류 아래에 폴더 소유자(is owned by:)와 현재 사용자(but the current user is:)를 함께 보여 줍니다.
1. 다른 계정이 만든 폴더
다른 윈도우 계정이 만든 폴더를 같은 NTFS 드라이브 안에서 옮겼거나, 소유권을 보존하는 옵션으로 복사했거나, 다른 PC에서 쓰던 외장 드라이브의 저장소를 그대로 여는 경우에는 소유자가 예전 계정으로 남아 있을 수 있습니다. 폴더 소유자가 Administrators 그룹이면 현재 사용자가 관리자일 때는 통과하지만, 관리자가 아닌 계정에서는 막힙니다.
2. Git을 실행한 계정이 다를 때
작업 스케줄러, 서비스, 자동화 도구가 SYSTEM이나 다른 계정으로 Git을 실행하면 폴더는 내 것이어도 실행 계정 기준으로는 남의 폴더입니다. 이때 내 계정에서 --global로 등록한 예외는 그 계정에 적용되지 않습니다. --global 설정은 해당 실행 사용자의 전역 설정인 ~/.gitconfig 또는 $XDG_CONFIG_HOME/git/config에 저장되며, GIT_CONFIG_GLOBAL이 지정된 경우에는 그 파일을 사용하기 때문입니다.
3. 소유자를 기록하지 않는 드라이브
FAT32처럼 소유자 정보를 저장하지 않는 파일 시스템(일부 USB 메모리)에 있는 저장소에서는 소유자 줄 대신 is on a file system that does not record ownership라는 문구가 나옵니다. 해결은 같습니다.
해결 방법
- 오류 메시지에서
To add an exception for this directory, call:아래 줄을 찾습니다. 경로는 PC마다 다르므로 메시지에 나온 경로를 그대로 씁니다. - 그 폴더가 내가 믿을 수 있는 저장소인지 확인합니다. 모르는 사람이 만든 폴더라면 등록하지 않습니다.
- 평소 Git을 쓰는 계정으로 아래 명령을 실행합니다.
PowerShell 또는 Git Bash에서 실행합니다(경로에 공백이 있으면 작은따옴표로 감쌉니다).
git config --global --add safe.directory 'C:/projects/my-repo'
safe.directory는 값을 여러 개 가질 수 있어서, 저장소마다 --add로 한 줄씩 추가하면 됩니다. 이 설정은 시스템·전역·명령줄 설정에서만 인정되고, 저장소 안의 .git/config에 넣으면 무시됩니다.
여러 저장소가 한 폴더 아래에 있을 때
폴더 경로 끝에 /*를 붙이면 그 아래 모든 저장소를 허용합니다(2026년 10월 Git 2.56 문서 기준). 따옴표로 감싸야 셸이 *를 바꾸지 않습니다.
git config --global --add safe.directory 'C:/projects/*'
예약 작업·다른 계정에서 실행할 때
실행 계정을 바꿀 수 없다면 그 명령에만 설정을 붙이는 방법이 있습니다. -c로 준 설정은 명령줄 설정이라 이 검사에서 인정되고, 저장되지 않으므로 그 실행에만 적용됩니다.
git -c safe.directory='C:/projects/my-repo' status
모든 사용자에게 적용하려면 --global 대신 --system을 쓰는데, 이 설정 파일은 Git 설치 폴더에 있어 관리자 권한 터미널이 필요할 수 있습니다.
해결됐는지 확인
PowerShell 또는 Git Bash에서 등록된 목록을 봅니다.
git config --global --get-all safe.directory
방금 넣은 경로가 한 줄로 보이면 등록된 것입니다. 이어서 저장소 폴더에서 git status를 실행해 dubious ownership 오류 없이 상태가 출력되면 해결된 것입니다. 잘못 넣은 값은 git config --global --edit로 설정 파일을 열어 [safe] 아래 해당 줄을 지우면 됩니다.
예외 등록 뒤 git status가 오류 없이 실행되면 해결입니다
그래도 안 될 때
- 경로가 다름: 등록한 경로가 실제 저장소 경로와 같은 경로로 정리되지 않으면 적용되지 않을 수 있습니다. 오류 메시지에 나온 명령을 그대로 복사해 다시 등록하는 것이 가장 확실합니다.
- 다른 계정의 설정: 자동화·서비스에서 나는 오류라면 내 계정이 아니라 Git을 실행하는 계정 기준으로 등록했는지 확인합니다. 그 계정으로 등록하기 어렵다면
-c safe.directory=경로를 씁니다. - 저장소 안에 넣은 설정:
.git/config에 넣은safe.directory는 무시됩니다.--global또는--system으로 넣습니다.
자주 묻는 질문
'*'로 전부 허용하면 안 되나요?
공식 문서는 *를 이 보안 검사를 완전히 끄는 값이라고 설명합니다. 필요한 저장소만 등록하는 편이 안전합니다.
폴더 소유자를 바꾸면 안 되나요?
가능하지만 폴더 권한이 함께 바뀔 수 있어, 되돌리기 쉬운 예외 등록을 먼저 권합니다.
detected dubious ownership은 폴더 소유자와 실행 계정이 달라서 나는 보안 차단입니다. 믿을 수 있는 폴더만 메시지에 나온 명령으로 safe.directory에 등록하면 됩니다.
참고한 공식 문서
- Git 공식 문서 — git-config (safe.directory, 설정 범위)
- Git 저장소 — Documentation/config/safe.adoc
- Git 저장소 — setup.c (오류 메시지 원문)
- Git 저장소 — setup.c v2.35.2 (unsafe repository 문구)
- Git 저장소 — compat/mingw.c (윈도우 소유자 검사)
- GitHub 블로그 — Git security vulnerability announced (2022-04-12)
- Microsoft Learn — 파일 복사·이동 시 권한
- Atlassian 지원 문서 — detected dubious ownership
'오류 해결' 카테고리의 다른 글
| PowerShell '-File 매개 변수에 대한 인수' 오류: .ps1 파일 경로 문제와 해결 (0) | 2026.10.18 |
|---|