Khắc phục lỗi Git 'Detected Dubious Ownership' trên macOS

beginner🍎 macOS2026-07-12| macOS (Monterey, Ventura, Sonoma, Sequoia), Git phiên bản 2.35.2 trở lên

Error Message

fatal: detected dubious ownership in repository at '/Users/username/project'
#git#macos#security#docker#terminal

Vấn đềBạn đang định chạy nhanh lệnh git status hoặc git pull, nhưng thay vì kết quả như thường lệ, terminal lại báo lỗi. Git đột ngột từ chối hoạt động và hiển thị một cảnh báo bảo mật gây khó chịu:

fatal: detected dubious ownership in repository at '/Users/username/project'

Điều này thường xảy ra ngay sau khi cập nhật Git hoặc khi bạn chuyển đổi giữa môi trường phát triển cục bộ và container Docker. Nó làm gián đoạn hoàn toàn luồng công việc, khiến bạn không thể commit, push, hay thậm chí là kiểm tra xem mình đang ở branch nào.

Nguyên nhân gốc rễĐây không phải là một lỗi ngẫu nhiên. Đó là một biện pháp bảo mật có chủ đích. Vào tháng 4 năm 2022, đội ngũ Git đã phát hành một bản vá (v2.35.2) để khắc phục lỗ hổng bảo mật CVE-2022-24765.

Trên các hệ thống dùng chung, một kẻ xấu có thể tạo thư mục .git trong một thư mục cha mà họ sở hữu. Nếu bạn chạy lệnh Git trong một thư mục con, Git có thể vô tình thực thi mã bằng quyền hạn cấp cao của bạn. Để ngăn chặn điều này, Git hiện sẽ xác minh xem người chạy lệnh có thực sự sở hữu thư mục repository đó hay không. Nếu có sự sai lệch, Git sẽ chặn quyền truy cập. Trên macOS, bạn có thể sẽ gặp lỗi này nếu:

  • Sai biệt Docker: Bạn đang làm việc bên trong một container với user là root (UID 0), nhưng ID người dùng trên Mac của bạn là 501.- Di trú dữ liệu: Bạn đã chuyển dữ liệu từ máy Mac cũ sang bằng Time Machine hoặc Migration Assistant.- Ổ cứng ngoài: Dự án của bạn nằm trên một ổ đĩa được định dạng FAT32 hoặc ExFAT, vốn không hỗ trợ tốt các quyền hạn (permissions) của Unix.## Các bước giải quyết### Giải pháp 1: Tin tưởng thư mục cụ thể (Khuyên dùng)Nếu bạn biết chắc repository này an toàn, hãy yêu cầu Git bỏ qua việc kiểm tra quyền sở hữu đối với đường dẫn cụ thể này. Đây là cách khắc phục sạch nhất vì nó không làm giảm cài đặt bảo mật cho phần còn lại của hệ thống. Sao chép đường dẫn từ thông báo lỗi của bạn và chạy lệnh:
git config --global --add safe.directory /Users/username/project

Mẹo nhỏ: Nếu tên thư mục của bạn có khoảng trắng, ví dụ /Users/work/My Project, hãy đảm bảo bao quanh toàn bộ đường dẫn bằng dấu ngoặc kép.

Giải pháp 2: Lối tắt "Tin tưởng toàn cục"Bạn gặp lỗi này trên hàng chục dự án khác nhau? Đây là tình trạng phổ biến đối với các lập trình viên sử dụng Docker Compose thường xuyên. Thay vì thêm từng thư mục một cách thủ công, bạn có thể yêu cầu Git tin tưởng mọi thư mục trên máy của mình.

git config --global --add safe.directory '*'

Hãy thận trọng khi sử dụng cách này. Bằng cách sử dụng ký tự đại diện '*', về cơ bản bạn đang từ chối bản vá bảo mật mà Git đã triển khai vào năm 2022. Chỉ nên làm điều này nếu bạn là người dùng duy nhất trên máy tính của mình.

Giải pháp 3: Lấy lại quyền sở hữu thư mụcNếu dự án hoàn toàn nằm ở máy cục bộ, cách khắc phục lâu dài tốt nhất là đảm bảo người dùng macOS của bạn thực sự sở hữu các tệp tin đó. Điều này giúp đồng bộ quyền hạn của hệ thống tệp với mong đợi của Git.

sudo chown -R $(whoami) /Users/username/project

Lệnh này sẽ thay đổi chủ sở hữu của thư mục (bao gồm cả các thư mục con) thành người dùng hiện đang đăng nhập của bạn. Đây là cách khắc phục một lần, thường giải quyết được vấn đề mà không cần đụng đến cấu hình Git.

Cách xác nhận kết quảSau khi áp dụng một trong các bước trên, hãy kiểm tra lại bằng cách chạy một lệnh cơ bản:

git status

Nếu bạn thấy các thay đổi đã được staged và tên branch, nghĩa là bạn đã thành công. Để xem danh sách tất cả các thư mục bạn đã đánh dấu là an toàn, hãy chạy:

git config --global --get-all safe.directory

Tóm tắt các điểm chínhCác bản cập nhật bảo mật có thể gây phiền toái, nhưng chúng tồn tại đều có lý do. Khi khắc phục sự cố về quyền sở hữu trên macOS, hãy lưu ý các điểm sau:

  • Kiểm tra UID: Hãy nhớ rằng Docker thường hoạt động với UID 0, trong khi người dùng Mac của bạn thường là 501. Sự xung đột giữa 501 và 0 này là nguyên nhân hàng đầu gây ra lỗi.- Càng cụ thể càng tốt: Cố gắng sử dụng Giải pháp 1 bất cứ khi nào có thể. Việc có một danh sách dài các thư mục an toàn sẽ tốt hơn là mở toang cánh cửa bằng ký tự đại diện.- Dấu gạch chéo ở cuối: Git rất khắt khe. Đảm bảo đường dẫn trong cấu hình safe.directory khớp chính xác từng ký tự với thông báo lỗi.

Related Error Notes