Lỗi đẩy Git: Không thể hủy liên kết cũ (Quyền bị từ chối)


190

Trong máy chủ từ xa, tôi có một hook post-receive được thiết lập để thực hiện kiểm tra git của kho lưu trữ của tôi:

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

Nhưng khi tôi thực hiện một cú đẩy từ máy cục bộ của mình đến kho git trong máy chủ, tôi nhận được các thông báo lỗi sau:

remote: error: unable to unlink old '<file>' (Permission denied)

Điều này xuất hiện nhiều lần, một thông báo lỗi cho hầu hết mọi tệp.

Tuy nhiên tôi có tệp README.txt mà tôi có thể thay đổi bằng git, đây là quyền của nó:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

Nhưng các tệp khác có cùng chủ sở hữu và cùng quyền, cho tôi lỗi đó.

Trong một kho lưu trữ cục bộ khác cho một trang web khác, tôi có các tệp với tên người dùng máy cục bộ của mình là chủ sở hữu và khi tôi đẩy đến máy chủ từ xa, nó tôn trọng chủ sở hữu máy chủ từ xa của các tệp và hoạt động như một bùa mê.

Rõ ràng có vẻ như là một lỗi liên quan đến quyền, nhưng tôi không thể tìm ra cách khắc phục, có gợi ý nào không?

Câu trả lời:


335

Khi bạn phải hủy liên kết tệp, bạn phải có quyền 'w' cho thư mục, trong đó tệp không phải cho tệp ...


65
Quả thực đó là vấn đề, tôi đã sửa nó bằng sudo chmod -R g+wcác thư mục có tội.
rfc1484

1
OMG cảm ơn. Đã rất khó chịu với suy nghĩ quyền là chính xác trên các tập tin. Làm cho cảm giác các bản cập nhật thực sự giống như mvhành động hơn là chỉ ghi đè.
doublejosh

1
Thay đổi quyền dir đã làm việc cho tôi (cảm ơn!) Nhưng thật kỳ lạ vì tôi có thể ghi đè thủ công các tệp được đề cập qua sftp mà không gặp rắc rối nào. Kỳ lạ là khi git cố gắng làm điều tương tự thì không thể.
Jonathan Stark

1
Ngoài ra, hãy nhớ rằng nếu bạn vẫn mở tệp, lỗi này cũng sẽ xuất hiện. Có cùng một lỗi và đó là lý do tại sao tôi không thể thay đổi.
Matias

1
Ký tự đầu tiên của ls -lmàn hình cho biết loại tệp và không liên quan đến quyền. Chín ký tự còn lại nằm trong ba bộ, mỗi bộ đại diện cho một lớp quyền là ba ký tự. Bộ đầu tiên đại diện cho lớp người dùng. Bộ thứ hai đại diện cho lớp nhóm. Bộ thứ ba đại diện cho các lớp khác. Các g+wtrong chmod cho tập nhóm (các gtham số) được phép ghi (các wtham số)
rfc1484


41

Nếu bạn đang sử dụng bất kỳ IDE nào thì rất có thể vấn đề là tệp đó đã được sử dụng bởi một số quy trình. Giống như tomcat của bạn có thể đang sử dụng các tập tin. Cố gắng xác định quá trình cụ thể và đóng nó. Điều đó sẽ giải quyết vấn đề của bạn.


12

Tôi đã có cùng một vấn đề và không có giải pháp nào ở trên làm việc cho tôi. Tôi đã xóa thư mục vi phạm. Sau đó:

git reset --hard

Đã xóa mọi tập tin còn sót lại để dọn sạch trạng thái git, sau đó đã làm:

git pull

Cuối cùng nó đã làm việc.

LƯU Ý: Ví dụ: nếu thư mục là thư mục chung có tệp xây dựng, hãy nhớ xây dựng lại các tệp


Cảm ơn, không có gì khác làm việc cho tôi cả, xóa nó dường như là lựa chọn duy nhất.
math0ne

Trong trường hợp của tôi, thư mục vi phạm đó là .git
Tushar Kathuria

11

Tôi nghĩ vấn đề có thể là quyền sở hữu đối với thư mục nên đặt nó thành quyền sở hữu người dùng hiện tại

sudo chown -R your_login_name /path/to/folder
Bạn có thể tìm thấy giải pháp [tại đây] [1]

7

FWIW - Tôi đã gặp một vấn đề tương tự và tôi không chắc liệu điều này có làm giảm bớt nó hay không (ngoài mod cho phép): Đóng Eclipse đang sử dụng nhánh có vấn đề này.


Tương tự, tôi đã gặp lỗi này khi tệp CSV được kiểm soát phiên bản được mở trong Excel. Đơn giản chỉ cần đóng Excel đã giải quyết nó. Điều này có lẽ đúng với các ứng dụng khác trên windows và có lẽ phụ thuộc vào cách chương trình đánh dấu tệp là mở trong khi chỉnh sửa.
Carel

3

Đây là một câu hỏi cũ, nhưng điều này có thể giúp người dùng Mac.

Nếu bạn đang sao chép các tệp từ Time Machine theo cách thủ công, thay vì khôi phục chúng thông qua Time Machine, nó sẽ thêm ACL vào mọi thứ, điều này có thể làm rối các quyền của bạn.

Ví dụ: phần trong bài viết này có nội dung "Cách khắc phục quyền truy cập tệp Mac OS X" cho thấy "mọi người" đều có quyền tùy chỉnh, điều này làm rối tung tất cả:

Quyền xấu, từ http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

Bạn cần xóa ACL khỏi các thư mục / tệp đó. Câu trả lời Siêu người dùng này đi sâu vào nó, nhưng đây là lệnh:

sudo chmod -RN .

Sau đó, bạn có thể đảm bảo các thư mục và tệp của bạn có quyền thích hợp. Tôi sử dụng 750cho các thư mục và 644cho các tập tin.


2

Tôi gặp lỗi này và các lỗi git lạ khác, khi tôi có một máy chủ đang chạy (trong Intellij). Dừng máy chủ và thử lại lệnh git thường xuyên sửa nó cho tôi.


2
git reset --hard

Đã làm cho tôi


4
Đó có thể là một chút cực đoan vì nó làm nhiều hơn nữa.
cdaddr

2
sudo chown -R $USER:$USER .

Đã làm công việc cho tôi.


1

Một số tệp được bảo vệ chống ghi mà thậm chí git không thể ghi nó. Thay đổi quyền thư mục để cho phép viết ví dụ: sudo chmod 775 tên người dùng

Rồi lại kéo git


0

Cũng nhớ kiểm tra sự cho phép của thư mục gốc!

Bạn có thể thấy:

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

và 'quyền bị từ chối' sẽ bật lên.


0

Kéo có thể đã tạo ra sự thay đổi cục bộ.

Thêm tệp không bị theo dõi của bạn:

git thêm.

Stash thay đổi.

git stash

Thả thay đổi cục bộ.

thả git

Kéo với sự cho phép sudo

sudo git kéo chi nhánh từ xa


đó là tất cả về sự cho phép của các tệp cục bộ, không có gì phải làm với git Tôi vừa chạy lệnh với sudo và nó đã hoạt động nên không yêu cầu tất cả các bước này
raviramani
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.