Cảnh báo Git Checkout: không thể hủy liên kết tệp, quyền bị từ chối


109

Tôi biết rằng có những vấn đề tương tự về git liên quan đến cảnh báo 'không thể hủy liên kết', nhưng tôi không thể sử dụng chúng.

Sự khác biệt chính là điều này xảy ra khi tôi chưa xử lý các mô-đun con theo bất kỳ cách nào (tôi chưa bao giờ xử lý chúng trước đây). Tôi đã tạo một nhánh có tên là 'nâng cấp', xóa các tệp khung cũ của mình và sao chép vào các tệp mới. Tôi đã sử dụng git add -A, sau đó cam kết mọi thứ. Khi tôi cố gắng kiểm tra nhánh trung kế, nó phản hồi với các lỗi sau:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

...Vân vân. Có hàng trăm cái giống vậy.

Lúc đầu, tôi nghĩ đây chỉ đơn giản là một vấn đề về quyền và vì vậy tôi đã thêm quyền ghi nhóm vào toàn bộ thư mục yêu cầu một cách đệ quy, nhưng không có thay đổi nào.

Chỉnh sửa: Như được đề xuất trong câu trả lời bên dưới, tôi đã cố gắng làm điều tương tự nhưng mọi thứ khác đã đóng lại. Tôi đã không có nhiều may mắn hơn trước đây.

Vấn đề này đặc biệt gây suy nhược vì tôi không thể di chuyển đến thân cây để trở lại phát triển bình thường.



9
Tôi giải quyết nó với một đơn giảnsudo chown -R username directory
Stephen Corwin

Câu trả lời:


84

Tôi thường thấy loại lỗi đó khi có một quá trình không giải phóng phần xử lý của các tệp đó.

Đảm bảo rằng không có gì đang chạy và sau đó thử thanh toán lại.

Lưu ý: nó cũng có thể liên quan đến cách Git đã được cài đặt (trên Windows, UAC có thể tạo ra sự cố nếu msysgit được cài đặt trong C:\Programhoặc C:\Program Files, xem " msysgit - sh.exe - fork: Permission allow - Vista 64 bit " và nhận xét 2 của vấn đề 437 )

Lưu ý: như minh họa bên dưới , một nguyên nhân phổ biến khác của vấn đề là vấn đề quyền trên thư mục (sai chủ sở hữu), không nhất thiết là trên tệp không thể hủy liên kết.


1
Tôi đang sử dụng Ubuntu, để giải quyết vấn đề đó. Và thật không may, tôi chỉ ở trong trình duyệt web này và bảng điều khiển của tôi, trong đó có một tab mở đến thư mục liên quan (và hai tab mở khá ở nơi khác).
Paragon

3
@Paragon: ngay cả trên unix, bạn có thể xử lý các vấn đề. Nếu không, đây sẽ là một vấn đề về quyền của một số loại. Mặc dù vậy, bạn sẽ có thể buộc thanh toán. git checkout -f master
VonC

2
+1 trong trường hợp của tôi, đó là thư mục chia sẻ với một máy ảo đang hoạt động, ngăn cấm việc loại bỏ tệp trong git trên hệ thống máy chủ. Làm tôi thất vọng, vì vậy cảm ơn vì gợi ý!
Jook

1
Cùng một vấn đề. Chạy Process Explorer> Ctrl + F> <tên tệp> - sẽ hiển thị quá trình, giữ cho tệp này được mở.
setevoy

1
GitExtensions đã hiển thị lỗi này khi cố gắng tìm nạp tất cả ... Tôi cũng đã mở GitKraken. Sau khi tôi đóng GitKraken, tất cả tìm nạp đều hoạt động mà không có lỗi.
mkaj

99

Trong lần đầu tiên gặp lỗi này, người dùng của tôi có quyền "ghi" vào tệp nhưng không có quyền đối với thư mục chứa. Kiểm tra quyền của thư mục chứa tệp.


95
Ôi trời, buồn cười quá, hôm nay tôi mới xem qua câu trả lời này và rồi tôi nhận ra nó là của chính mình! Tuy nhiên, nó đã hoạt động trở lại!
Elijah Lynn

Ok, nó đã xảy ra với tôi trên windows 10, tôi vào thư mục dự án chính. và thêm CHO TẤT CẢ NGƯỜI DÙNG CÓ THỂ, tất cả các quyền. Vì vậy, đối với hệ thống, quản trị viên, người dùng, tất cả các khả năng. Áp dụng chnages. Và nó dường như hoạt động, bằng cách nào đó có thể với bản cập nhật windows 10, ngay cả khi chúng tôi không tạo người dùng mới, chúng tôi vẫn bị xử lý như người dùng mới, không có quyền. Ví dụ: tôi có một số tên wird S-1-15-32 ..... Không phải tên đăng nhập mà tôi có khi chúng tôi mở khóa máy tính xách tay của mình.
PsychedelicSubstance

30

"Hủy liên kết" về cơ bản có nghĩa là "xóa tệp" trong trường hợp này.

Lỗi này không phải do git tự gây ra. Bạn sẽ gặp lỗi tương tự khi xóa các tệp đó theo cách thủ công, trong dòng lệnh hoặc trình khám phá tệp.


18
Trong lần đầu tiên gặp lỗi này, người dùng của tôi có quyền "ghi" vào tệp nhưng thư mục chứa thì không.
Elijah Lynn

3
@Elijah: Cảm ơn bạn! Đó là những gì nó đã được cho tôi.
Jesse Lee

4
Trong trường hợp của tôi, tôi thấy tệp được đề cập đã bị khóa bởi một ứng dụng khác. Việc đóng ứng dụng sẽ giải phóng tệp và cho phép quá trình thanh toán tiếp tục.
Simon Tewsi

25

Bạn không có quyền truy cập, có thể do bạn không phải là chủ sở hữu.

Khắc phục bằng cách thay đổi chủ sở hữu thành chính bạn:

sudo chown -R your_login_name /path/to/folder

2
Trên máy phát triển cục bộ của tôi, các tệp được đề cập ban đầu được tạo bởi máy chủ apache cục bộ của tôi, do đó, do người dùng www-data sở hữu. Sau khi tôi chọn chúng vào tài khoản của mình, mọi thứ hoạt động bình thường trở lại. "Quyền bị từ chối" là vấn đề thực sự. "Không thể không thích" chỉ là một con cá trích đỏ.
Dale Anderson

23

Tôi đã gặp sự cố với tệp default-settings.php trong drupal 7. Trong trường hợp này, tôi không thể xóa hoặc hoàn nguyên nó giống như @rtconner đã nói. Tôi không có ứng dụng hoặc bất kỳ thứ gì sử dụng tệp này và nó cuối cùng là lỗi quyền.

Tôi đã thêm vào chmod 777 *thư mục và sau đó tôi có thể hoàn nguyên nó.


3
Mặc dù bạn có thể không muốn có 777trên bất kỳ thư mục nào. Điều này đã giải quyết vấn đề của tôi, nhưng tôi nhanh chóng thay đổi nó trở lại mặc định sau khi nó được giải quyết. Cảm ơn!
Bram

13

Bạn có thể thay đổi quyền ghi để hoàn thành công việc.

sudo chmod -R ug+w . 

Lệnh này sẽ cấp 'w'quyền cho tất cả các thư mục trong thư mục hiện tại.


6

Tôi gặp sự cố này bất cứ khi nào chạy "git repack" hoặc "git gc" trên máy OS X của mình, ngay cả khi chạy git với đặc quyền quản trị và cuối cùng tôi đã giải quyết được nó sau khi xem trang này: http://hints.macworld.com /comment.php?mode=view&cid=1734

Cách khắc phục là mở một thiết bị đầu cuối, đi tới git repo, cd của bạn vào thư mục .git, sau đó thực hiện:

chflags -R nouchg *

Nếu đó là sự cố, thì sau đó, lệnh git của bạn sẽ hoạt động bình thường.


1
Liên kết macworld không còn hợp lệ. Đây là bản giới thiệu được cập nhật: superuser.com/a/40754
webb

5

Điều này cũng có thể xảy ra khi:

  1. Bạn đã chạy một quy trình bên trong vùng chứa Docker và:

  2. Một số tệp được tạo bởi quá trình đó và:

  3. Đích của tệp được gắn kết dưới dạng một ổ đĩa trên máy chủ Docker và:

  4. Bạn đang chạy gittrên máy chủ Docker.


Nếu trường hợp này xảy ra, hãy phân loại tệp bạn muốn cam kết và chạy:

git diff --name-only --cached | xargs ls -l 

Các tệp đáp ứng các tiêu chí trên sẽ có tiền tố là:

-rw-r--r-- 1 root root ...

Chúng được sở hữu bởi rootvà không thể ghi, điều này không tốt. Để khắc phục lỗi chạy:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Một giải pháp rõ ràng hơn có lẽ sẽ là sử dụng --usertùy chọn, xem phần này cho Dockerphần này cho Docker soạn .


4

Đối với những người đang sử dụng Intellij , như @rtconner đã nói vấn đề này không phải do git gây ra. Vì IDE của bạn bị khóa nên (các) tệp git không thể hủy liên kết nó. Vì vậy, bạn cần đóng IDE của mình và sau đó cố gắng hợp nhất (hoặc bất kỳ thứ gì bạn thích) nó thông qua dòng lệnh.


Điều đó là vậy đó. Đã xảy ra với Phát triển Android, vì AndroidStudio là Intellij.
Reinherd

2

Trong trường hợp của tôi, đó là một ký tự ":" trong tên thư mục đặt trước git repo để kiểm tra trên windows.


2

trên thiết bị đầu cuối trên mac tôi chỉ làm điều này

thanh toán sudo git. (để dọn dẹp mọi thứ)

và sau đó

sudo git pull origin


2

Tôi đã gặp lỗi này bên trong một máy ảo (chạy Ubuntu), khi tôi cố gắng thực hiện git reset --hard .

Thay vào đó, cách khắc phục đơn giản là chạy git reset --hardtừ máy chủ OS X.


1

Không có đề xuất nào khác phù hợp với tôi, nhưng điều này đã làm:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive


1

Trong trường hợp của tôi, thư mục Windows của tôi nằm trong thư mục Dropbox. Nó không phải là một vấn đề cụ thể của Git. Khi một tệp (trong trường hợp này là tệp khóa) vừa được tạo, Dropbox phải mất thêm một giây nữa để thực hiện đồng bộ hóa. Trong thời gian đó, tệp đang được Dropbox sử dụng và bất kỳ chương trình nào của bên thứ 3 (trong trường hợp này là Git) không thể xóa tệp.

Giải pháp của tôi là thoát Dropbox và do đó tránh được điều kỳ diệu đằng sau việc đồng bộ hóa tệp của Dropbox.


0

Tôi đã gặp lỗi này và nguyên nhân là do sai "chủ sở hữu / nhóm" của tệp / thư mục . Bạn phải nhờ quản trị viên máy chủ hỗ trợ để thay đổi "chủ sở hữu / nhóm" của tệp / thư mục này và thử lại bằng cách sử dụng "git pull" một lần nữa. Hoặc nếu bạn là một sudoer, chỉ cần sudo chown "tên chủ sở hữu của bạn / tên nhóm của bạn" và thử kéo lại kho lưu trữ của bạn. Hãy thử nó, nó hoạt động 100% với tôi!


0

Đảm bảo rằng bất kỳ quy trình hoặc chuỗi liên quan nào không chạy và thực hiện tác vụ kết thúc hoặc buộc thoát khỏi khi cần thiết.

Đảm bảo rằng bạn thay đổi quyền sở hữu.


0

Nói chung, nếu điều này xảy ra trong Windows và bạn đang sử dụng rùa bò , thì đó là bộ nhớ cache trạng thái của rùa biển . Hãy giết quá trình đó và nó sẽ được giải phóng.


Bạn thực sự có thể vô hiệu hóa hoàn toàn bộ đệm trạng thái của TortoiseGit và đó thường là điều mà tôi muốn giới thiệu. Đó thường là nguyên nhân gây ra nhiều vụ khóa tệp không mong muốn và nó có xu hướng gây ra nhiều rắc rối hơn. git statusThay vào đó, chỉ cần sử dụng từ dòng lệnh.

0

Tôi chỉ phải chuyển người dùng từ ubuntu sang tên người dùng thực của mình mà lần đầu tiên tôi thực hiện. Điều đó đã sửa nó.


và những gì về người dùng windows?
Herr Nentu '

OP đã có trên Ubuntu. Tôi sẽ không nhận xét về một chuỗi Windows.
Marc

0

Giải quyết cho tôi bằng cách đặt ứng dụng git của tôi (GitExtensions) luôn chạy ở chế độ quản trị viên.


0

Tôi đã gặp vấn đề đó khi sử dụng IntelliJ (14.1.3 Ultimate), tôi muốn hoàn nguyên các thay đổi trong một số tệp.

Giải quyết bằng cách đóng Git Bashmở trong một cửa sổ khác - một thử nghiệm hoàn nguyên khác IntelliJđã hoạt động.


0

Tôi gặp phải lỗi này và tôi nghĩ rằng vấn đề là tôi đã 'chạy với tư cách quản trị viên' khi khởi động Eclipse và tạo các tệp, do đó chúng thuộc quyền sở hữu của Quản trị viên (nhận thấy bằng cách chạy 'ls -la' trên thư mục). Sau đó, khi tôi cố gắng lưu trữ các tệp, nó đã không cho phép tôi ('không thể hủy liên kết tệp' và tất cả những điều đó). Thực hiện chmod trên các tệp là giải pháp cho tôi.



0

Tất cả những gì bạn cần làm là cung cấp quyền, chạy lệnh bên dưới từ thư mục gốc của dự án của bạn:

    chmod ug+w <directory path>

0

Tôi đã gặp vấn đề tương tự, tôi đã thử một số lựa chọn thay thế như những người khác đề xuất.

Nhưng cuối cùng việc cấp quyền chính xác cho thư mục .git đã giải quyết được vấn đề.

sudo chown -R "${USER:-$(id -un)}" .git

0

Trong trường hợp của tôi, vấn đề quyền đã được giải quyết bằng cách đặt www-datalàm chủ sở hữu:

chown -R www-data project_folder_name

0

Tôi nghĩ đó là về quyền đối với tệp của bạn:

sudo chmod 777 -R <your-git-folder>
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.