본문 바로가기
IT

Git detected dubious ownership 오류 해결: safe.directory 확인·추가·삭제 순서 (2026년 8월 28일 기준)

by 바른정보블로그 2026. 8. 31.

Git detected dubious ownership 오류와 safe.directory 설정 점검을 설명하는 대표 이미지

 

서론

Git 저장소에서 명령을 실행하면 detected dubious ownership in repository 오류가 나타나는 경우가 있다. 이는 실행 계정과 저장소 소유자가 다를 때 Git이 해당 저장소의 설정 파일과 hooks 실행을 기본적으로 거부하기 때문에 발생한다. sudo로 저장소에 접근하거나, 외장 디스크·네트워크 드라이브·컨테이너 볼륨을 통해 다른 계정 소유의 저장소를 다룰 때 흔히 마주친다. 이 글은 2026년 8월 28일 Git 공식 문서를 기준으로 안전한 확인 순서를 정리한다.

빠른 결론

저장소 소유자와 경로를 먼저 확인하고, 신뢰할 수 있는 경우에만 git config --global --add safe.directory로 절대경로를 추가한다.
출처가 불확실한 저장소는 등록해 신뢰하기보다 본인 계정 소유의 새 경로에 다시 clone하는 편이 안전하다.
safe.directory=*로 전체를 허용하는 방식은 보호 기능 자체를 무력화하므로 권장하지 않는다.

원인: Git이 소유자가 다른 저장소를 기본 거부하는 이유

Git은 실행 계정과 저장소(.git) 소유자가 다르면 해당 저장소의 config 값을 읽거나 hooks를 실행하지 않는다. 공유 서버나 sudo 환경에서 임의로 만들어진 저장소의 설정·hooks가 실행 계정 권한으로 동작하는 것을 막기 위한 보호 장치다. safe.directory는 이 예외를 등록하는 다중 값 설정이며, 공식 문서에 따르면 protected configuration에서만 인정된다. 즉 저장소 local config에 safe.directory를 적어 넣어도 무시되며, system·global 설정 파일에 있어야 실제로 적용된다.

점검 체크리스트

점검 항목 확인 명령·방법 비고
오류 발생 저장소 경로 git rev-parse --show-toplevel 절대경로와 symlink 여부 확인
저장소 소유자 파일 속성 또는 ls -ld 실행 계정과 다른지 확인
등록된 safe.directory 값 git config --show-origin --get-all safe.directory config 파일 출처도 표시
저장소 신뢰 여부 출처·작성자 확인 불확실하면 추가하지 않음
와일드카드(*) 사용 여부 global config 확인 전체 허용은 피하기

단계별 진행 순서

  1. 최상위 경로 확인: 오류 메시지의 경로를 그대로 믿지 말고 실제 저장소 최상위 경로를 확인한다.
    git rev-parse --show-toplevel
  2. 현재 예외 목록 확인: protected config에 등록된 safe.directory 값을 출처와 함께 본다.
    git config --show-origin --get-all safe.directory
  3. 소유자가 다른 이유 확인: sudo 설치 스크립트, 공유 서버, 마운트 볼륨 등 사유가 합리적인지 파악한다.
  4. 신뢰하는 경로만 추가: 저장소 출처를 확인했다면 절대경로를 그대로 등록한다.
    git config --global --add safe.directory "/절대/경로"
  5. 반영 여부 재확인: 다시 --show-origin --get-all 명령을 실행해 global config에 기록됐는지 본다.
  6. 불필요한 항목 삭제: 더 이상 쓰지 않는 항목은 정확한 값만 지정해 삭제한다.
    git config unset --global --value="/절대/경로" --fixed-value safe.directory

주의사항

  • safe.directory는 다중 값 설정이라 여러 줄이 쌓일 수 있다. 삭제할 때는 --value--fixed-value로 정확한 경로를 지정한다.
  • safe.directory=*는 소유자 검사 자체를 끄는 설정이다. 여러 사용자가 접근하는 환경에서 모든 저장소를 한꺼번에 신뢰하지 않는다.
  • 이 값은 protected configuration(system·global 등)에서만 인정된다. 저장소 local config에 적어 넣어도 적용되지 않는다.
  • 출처가 불명확한 저장소는 예외로 등록하기보다 자신의 계정 소유 경로에 새로 clone해 사용한다.

그래도 해결되지 않을 때 추가 점검

  1. 추가한 값이 실제 global config 파일에 기록됐는지 git config --show-origin --get-all safe.directory로 출처까지 확인한다.
  2. 여러 계정이 같은 저장소에 접근한다면, 실제 오류가 발생하는 계정의 HOME 기준 global config에 값이 들어갔는지 본다.
  3. 경로에 symlink가 끼어 있으면 오류 메시지와 실제 최상위 경로가 다를 수 있다. rev-parse 결과를 기준으로 다시 확인한다.
  4. 컨테이너·WSL·네트워크 드라이브에서는 마운트 방식에 따라 소유자(UID)가 예상과 다르게 보일 수 있으므로 파일시스템 속성을 확인한다.

FAQ

Q1. safe.directory를 저장소 로컬 config(.git/config)에 넣어도 되나요?

공식 문서에 따르면 이 설정은 protected configuration에서만 인정되므로 local config에 넣어도 적용되지 않는다. system 또는 global config에 등록해야 한다.

Q2. safe.directory=*로 한 번에 다 허용하면 안 되나요?

가능하지만 권장하지 않는다. 소유자 검사 자체를 비활성화하므로 필요한 경로만 개별적으로 추가하는 편이 안전하다.

Q3. 여러 값 중 하나만 지우려면 어떻게 하나요?

git config unset --global --value="경로" --fixed-value safe.directory처럼 정확한 경로를 지정해 해당 항목만 제거한다.

관련 글

공식 출처


댓글