Computer >> Máy Tính >  >> Lập trình >> Lập trình

Git Không thể mở .git / FETCH_HEAD:Quyền bị từ chối Giải pháp

Git cần quyền ghi trên các tệp trong thư mục có tên .git / bên trong thư mục dự án của bạn. Nếu dòng lệnh Git không có quyền truy cập vào thư mục này, bạn sẽ gặp phải lỗi như “Không thể mở .git / FETCH_HEAD:Quyền bị từ chối” khi bạn cố gắng kéo một tệp.

Trong hướng dẫn này, chúng ta sẽ thảo luận về lỗi này có nghĩa là gì và nguyên nhân của nó. Chúng tôi sẽ xem qua một ví dụ để bạn có thể tìm hiểu cách khắc phục lỗi đó trong chương trình của mình.

Không thể mở .git / FETCH_HEAD:Quyền bị từ chối

Kho lưu trữ Git chứa một thư mục đặc biệt được gọi là .git /. Bạn có thể không nhìn thấy thư mục này vì nó bị ẩn. Trạng thái ẩn của thư mục này được biểu thị bằng dấu dừng đầy đủ (“.”) Ở đầu tên thư mục.

Thư mục này chứa các phần siêu dữ liệu khác nhau về một kho lưu trữ. Nó theo dõi các tùy chọn cấu hình dành riêng cho dự án của bạn, các tham chiếu trong dự án của bạn, HEAD hiện tại của bạn, trong số các phần thông tin quan trọng khác về kho lưu trữ của bạn.

Git cần quyền truy cập đọc và ghi vào thư mục này. Điều này là do nội dung của nó sẽ thay đổi khi bạn chạy các lệnh như git config và git pull.

Một tình huống mẫu

Chúng tôi sẽ sao chép một kho lưu trữ có tên là ck-git từ GitHub. Kho lưu trữ này chứa một tệp có tên là README.md. Để sao chép kho lưu trữ này, chúng ta có thể sử dụng lệnh git clone:

sudo git clone https://github.com/Career-Karma-Tutorials/ck-git

Nội dung của tệp README.md của chúng tôi hiện là:

# ck-git

Chúng tôi muốn thay đổi tệp này để chứa README.md mô tả hơn. Chúng tôi sẽ mở tệp này trong một trình soạn thảo văn bản và thay đổi nội dung của nó thành như sau:

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

# Career Karma Git Demo

Kho lưu trữ với các tệp demo cho hướng dẫn Career Karma’s Git.

Cái đó tốt hơn. Tệp của chúng tôi mô tả chính xác hơn mục đích của kho lưu trữ Git của chúng tôi. Bây giờ, hãy thêm thay đổi này vào khu vực tổ chức để chúng ta có thể tạo một cam kết:

sudo git add README.md

Git biết rằng chúng tôi muốn thêm README.md vào cam kết tiếp theo của chúng tôi. Để làm cho các thay đổi của chúng tôi hiển thị trong kho lưu trữ từ xa của chúng tôi, chúng tôi phải thêm chúng vào một cam kết:

sudo git commit -m "docs: Make README.md more descriptive"

Cam kết của chúng tôi hiện đã sẵn sàng được đưa vào kho lưu trữ từ xa của chúng tôi. Trước khi chúng tôi đẩy mã của mình, chúng tôi sẽ kéo phiên bản từ xa của kho lưu trữ của chúng tôi. Điều này sẽ cho phép chúng tôi đảm bảo rằng chúng tôi cập nhật bất kỳ thay đổi nào đã được thực hiện kể từ khi chúng tôi nhân bản kho lưu trữ:

git pull

Lệnh này trả về:

error: cannot open .git/FETCH_HEAD: Permission denied

Lỗi này cho chúng tôi biết rằng Git không thể truy cập một trong các tệp cấu hình của nó, FETCH_HEAD.

Giải pháp

Chúng tôi đã sao chép kho lưu trữ ck-git bằng lệnh “sudo”. Điều này có nghĩa là kho lưu trữ của chúng tôi đã được nhân bản với tư cách là người dùng gốc. Vì người dùng root đã nhân bản kho lưu trữ, các tệp trong kho lưu trữ thuộc quyền sở hữu của người dùng root.

Chúng ta có thể thấy điều này bằng cách chạy lệnh ls -la:

total 8
drwxr-xr-x   4 root   staff   128 Sep 17 07:15 .
drwxr-xr-x+ 90 James  staff  2880 Sep 17 07:15 ..
drwxr-xr-x  12 root   staff   384 Sep 17 07:15 .git
-rw-r--r--   1 root   staff 	1 Sep 17 07:15 README.md

Tất cả các tệp trong thư mục của chúng tôi đều thuộc quyền sở hữu của "root", là một phần của tài khoản "staff". Khi chúng tôi cố gắng kéo kho lưu trữ từ xa của mình mà không sử dụng “sudo”, một lỗi sẽ được trả về. Điều này là do tài khoản người dùng chuẩn của chúng tôi không có quyền sửa đổi các tệp trong thư mục.

Để khắc phục sự cố này, chúng tôi sẽ thay đổi quyền sở hữu các tệp trong thư mục của chúng tôi. Chúng ta có thể thực hiện việc này bằng lệnh chown:

sudo chown -R james:staff .

Lệnh này thay đổi chi tiết quyền sở hữu của tất cả các tệp và thư mục trong kho lưu trữ của chúng tôi, bao gồm cả thư mục .git /. Bây giờ chúng tôi là chủ sở hữu của thư mục và có toàn quyền truy cập vào thư mục dự án. Bây giờ chúng ta có thể lấy mã của mình:

git pull

Lệnh này thực thi thành công và trả về:

Already up to date.

Bây giờ chúng tôi biết rằng không có thay đổi nào được thực hiện đối với kho lưu trữ từ xa của chúng tôi kể từ lần cuối chúng tôi kéo mã của mình. Chúng tôi đã lấy mã lần cuối khi chúng tôi tạo kho lưu trữ.

Kết luận

Lỗi Git “Không thể mở .git / FETCH_HEAD:Quyền bị từ chối” xảy ra khi bạn cố gắng kéo mã từ một kho lưu trữ từ xa khi thư mục .git / trong thư mục dự án của bạn không thể truy cập được đối với người dùng hiện tại của bạn.

Để giải quyết lỗi này, hãy đảm bảo rằng người dùng hiện tại của bạn có đặc quyền đọc-ghi đối với kho lưu trữ Git mà bạn đang làm việc.