Hủy liên kết tệp Không thành công. Tôi có nên thử lại không?


572

Một cái gì đó sai đang xảy ra với một trong các tệp trong kho git cục bộ của tôi. Khi tôi đang cố gắng thay đổi chi nhánh, nó nói:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

Điều đó có nghĩa là gì?


1
Kiểm tra câu hỏi này
RDL

có thể trùng lặp của [git rebase đã 'bỏ liên kết của tập tin thất bại' lỗi] ( stackoverflow.com/questions/3698369/... )
Josh Lee

câu trả lời đã cho có hiệu quả với bạn không, nếu trình xem quá trình không hoạt động thì hãy khởi động lại và sau đó bạn có thể xóa tệp, bạn cũng có thể chấp nhận câu trả lời nếu nó hoạt động cho bạn
dhaval

1
Đồng thời kiểm tra xem quy trình git có quyền ghi trên tệp đó không.
boileau

Câu trả lời:


752

Điều này có thể có nghĩa là một chương trình khác đang sử dụng tệp, điều này ngăn git "di chuyển" tệp vào hoặc ra khỏi thư mục làm việc khi bạn đang cố gắng thay đổi các nhánh.

Tôi đã có điều này xảy ra trên Windows Vista trong đó nhật thực là chương trình "sử dụng" tệp. Các tập tin có thể không thực sự mở trong nhật thực nhưng có thể đã được mở bởi một quá trình chạy bằng nhật thực.

Trong trường hợp này, hãy thử đóng tệp trong bất kỳ ứng dụng nào có thể đã sử dụng nó. Nếu điều đó không làm việc, hãy thoát hoàn toàn mọi ứng dụng có thể đã mở tệp.


53
Trên Windows, sử dụng ProcessExplorer để tìm tiến trình nào mở tệp.
Dave C

2
Có cách nào để viết một tập lệnh như "nếu tập tin này không thể bị xóa (ví dụ: tập tin không tồn tại), chỉ cần bỏ qua tập tin".
2xMax

14
Trong trường hợp của tôi đó là Visual Studio và plugin Git của nó.
Michał Powaga

8
Trên Windows, nếu bạn không có sẵn ProcessExplorer hoặc không muốn tải xuống, bạn có thể chạy (Windows + R) "resmon", đi tới tab CPU và tìm kiếm tên tệp trong hộp văn bản "Số nhận dạng liên kết".
Raphael

6
Nếu bạn sử dụng, GitKrakenbạn có thể nhận được điều này nếu bạn thực hiện các lệnh như rebase
mtpultz

285

Tôi đã có vấn đề này và giải quyết nó bằng lệnh: git gc Lệnh trên loại bỏ temp và các tệp không cần thiết. (Người thu gom rác.)


43
git pullbắt đầu git gctự động và gc đã cố gắng truy cập một số tệp .pack và .inx. Chúng được giữ bởi quá trình "windows git", git pulllệnh sở hữu đó . Chạy git gcthủ công và hơn - git pullthực sự giải quyết vấn đề.
Nikita

4
Trong khi chạy, git gctôi lại gặp lỗi tương tự khi gcđang tiến hành
Prakash K

4
"Chạy git gc bằng tay và hơn - git pull thực sự giải quyết được vấn đề." Điều này đã giúp. Cảm ơn Nikita.
sangam

Điều này cũng giúp tôi. Chạy cái này trên Windows với Git Bash
Ascalonia

Sau khi bắt đầu kéo git tôi đã gặp lỗi này. Tôi nhấn CTRL + C để dừng kéo, chạy git gc và sau đó git kéo lại, vấn đề đã biến mất và không có gì bị phá vỡ bằng cách làm gián đoạn kéo.
daniel sp

84

giải pháp này từ đây làm việc cho tôi:

Đây là một câu trả lời cụ thể của Windows, vì vậy tôi biết rằng nó không liên quan đến bạn ... Tôi chỉ bao gồm nó vì lợi ích của những người tìm kiếm trong tương lai.

Trong trường hợp của tôi, đó là vì tôi đang chạy Git từ một dòng lệnh không nâng cao. "Chạy với tư cách quản trị viên" đã sửa nó cho tôi.


2
Đã làm cho tôi. Ran VS là quản trị viên và sau đó khởi chạy dấu nhắc lệnh từ VS
Sentinel

3
I: gõ Ctrl+Cđể chấm dứt danh sách rất dài các tệp không liên kết được; đã thoát gitbash, IDE của tôi và ứng dụng GitHub Windows; khởi động lại gitbash trong chế độ "Chạy với tư cách quản trị viên"; và chạy git gc --aggressive. Mất một lúc để hoàn thành, nhưng không có lỗi.
Đánh dấu McClelland

Nếu bạn tin rằng đây là một bản sao, bạn nên gắn cờ như vậy, không thêm câu trả lời chỉ vào câu trả lời khác
Liam

2
@Liam Câu hỏi này cũ hơn nhưng câu trả lời này chỉ dành cho câu hỏi khác và không chỉ có một câu trả lời cho câu hỏi này khiến cho việc đặt một câu hỏi là trùng lặp sẽ khó hơn.
sepehr

Điều này làm việc khá tốt cho tôi. Không có câu trả lời trước đã làm. Cảm ơn rất nhiều.
Roberto Rodriguez

35

Tôi gặp phải vấn đề này trong khi làm a git pull.

Tôi cố gắng git gcvà nó giải quyết vấn đề của tôi.


Tôi gặp vấn đề này trên máy Windows và giải pháp này ban đầu không hoạt động. Tuy nhiên một khi tôi chạy lệnh này từ một dấu nhắc lệnh quản trị viên thì nó đã giải quyết được vấn đề của tôi.
William W

23

Trong trường hợp của tôi không có quá trình chạm vào tập tin hoặc thư mục. Có thể nó xảy ra nếu đường dẫn rất dài, vì hạn chế hệ điều hành (windows). Hãy thử bật cờ hỗ trợ đường dài trong cấu hình git toàn cầu như được chỉ ra bên dưới:

git config --global core.longpaths true

hoặc cố gắng đặt cờ trả lời có / không nếu nó không mâu thuẫn với bạn

set GIT_ASK_YESNO=false

Nếu đường dẫn quá dài, tôi đã không tìm thấy giải pháp thành công.


5
Tôi không biết tại sao nhưng cài đặt "git config --global core.longpaths true" là hữu ích cho tôi.
Tối đa

GIT_ASK_YESNO, không thể tìm thấy thông tin về cái này Nó đến từ đâu ?
Majkinetor

xem: stackoverflow.com/questions/3698369/ cho ví dụ; Tôi làm không phải bây giờ nếu nó hoạt động với gần đây cả các phiên bản của git (2.9)
andhdo

core.longpathsvới bổ sung: thiết lập lại - gard prune gc đã làm việc cho tôi - nhưng phải đóng AndroidStudio để không gây rối với công cụ xây dựng của nó
Mike bovquier


10

Điều này có thể hữu ích cho một ai đó; nếu tất cả những điều trên không phù hợp với bạn, hãy làm theo các bước sau:

  1. Đóng IDE của bạn (của tôi là Eclipse, không chắc nó có áp dụng cho Intellij và các ứng dụng khác không) hoặc bất kỳ ứng dụng nào khác có thể đang sử dụng git.

  2. Mở git từ dòng lệnh (trong trường hợp của tôi, tôi đã có git bash) và chạy git gcnhư được đề cập bởi những người khác.

Điều này đã làm điều kỳ diệu cho tôi.


Đây là câu trả lời duy nhất có ích trong trường hợp của tôi, sử dụng Android Studio
0101100101

10

Khi tôi đang sử dụng gitkraken và dấu nhắc lệnh, tôi gặp vấn đề tương tự. Và sau đó tôi chạy git gclệnh nó đã giải quyết vấn đề của tôi. Vì vậy, tôi rất vui và muốn chia sẻ một số điểm có thể hữu ích.

Có gì git gcsẽ làm gì?

git gc loại bỏ các đối tượng không thể truy cập có thể đã được tạo ra từ các lệnh git add trước đó.

Khi nào nên chạy git gc?

Từ doc , người dùng được khuyến khích chạy tác vụ này một cách thường xuyên trong mỗi kho lưu trữ để duy trì việc sử dụng không gian đĩa tốt và hiệu suất hoạt động tốt.

Làm thế nào để làm cho nó tự động cấu hình?

Một số lệnh git có thể tự động chạy git gc; xem cờ --auto bên dưới để biết chi tiết. Nếu bạn biết những gì bạn đang làm và tất cả những gì bạn muốn là vô hiệu hóa hành vi này vĩnh viễn mà không cần cân nhắc thêm, chỉ cần làm

git config --global gc.auto 0

8

Trong trường hợp của tôi (Win8.1, TortoiseGit đang chạy), đó là quá trình gọi là "bộ đệm trạng thái TortoiseSVN" đang khóa tệp.

Giết nó cho phép tôi chạy "git gc" mà không gặp vấn đề gì nữa. Quá trình trên được bật lên bởi TortoiseGit, do đó không cần phải tự khởi động lại nó.


7

Tôi gặp vấn đề như vậy trên Windows 7 và hóa ra là do một số git.exequá trình mồ côi .

Để giải quyết nó, hãy mở Trình quản lý tác vụ và hủy tất cả các git.exequy trình.

gitcác lệnh có thời gian tồn tại ngắn, thông thường bạn sẽ không bao giờ thấy bất kỳ lệnh nào git.exetrong Trình quản lý tác vụ. Khi chúng ở đó, điều đó thường có nghĩa là có gì đó không ổn và bạn nên giết các quy trình đó.


7

Tôi gặp vấn đề này trong Windows. Tôi đã đóng IDE của mình (Android Studio) và chọn CÓ trong git shell. Nó đã làm việc.


5

Trên Windows 8: Tôi đã chạy git gc và nó nói git gc đã chạy, tôi đã chạy git gc --force và trình thu gom rác đã chạy.

Sau đó tôi có thể chuyển nhánh và hợp nhất mà không gặp vấn đề gì, hãy thử git gc --force.

Có lẽ quá trình gc đã không dừng lại một cách duyên dáng vì lý do này hay lý do khác.


Nó cũng hợp lệ cho Windows 10.
oguzhan

4

Tôi đã có vấn đề này với .tmpcác tập tin trong /.git/objects/packthư mục. Tôi nghĩ rằng một cái gì đó đã thất bại trong quá trình đẩy hoặc kéo, vì vậy tôi đã xóa các tệp tạm thời này và đặt lại ĐẦU TIÊN về cam kết cuối cùng của mình. Không chắc chắn nếu điều này được khuyên nhưng nó làm việc cho tôi. Cũng git count-objects -vđưa cho tôi một danh sách các .tmptệp không thuộc về thư mục gói.

Hoặc để chặn các tin nhắn y / n trong windows git open cmd.exevà chạy:

SETX GIT_ASK_YESNO false

xem tại đây: https://twitter.com/petercamfield/status/494805475733807104


Sau khi chạy git gc, git count-objects -vgiúp xác định các đối tượng tạm thời còn sót lại trong packthư mục.
mistaecko

4

Tôi đã có thể giải quyết điều này bằng cách mở Powershell với tư cách Quản trị viên và từ đó git checkout <branch_name>


Cảm ơn @ thanh-thuê. Điều này giúp tôi xác định nó là một vấn đề cho phép. Khi tôi sửa quyền windows cho thư mục đó, nó hoạt động.
Kumar

3

Tôi đã đối mặt với vấn đề tương tự trong khi thực hiện 'git pull'. Tôi đã thử lệnh git vệ sinh thủ công 'git gc' và nó đã giải quyết vấn đề của tôi.


4
Mặc dù đây một nỗ lực cho một câu trả lời, nhưng nó không thêm bất cứ điều gì chưa được bao phủ bởi các câu trả lời khác (chẳng hạn như câu trả lời này ). Nếu bạn đang cố gắng xác nhận rằng giải pháp này hoạt động hoặc muốn cảm ơn tác giả của câu trả lời đó, xin vui lòng không đăng câu trả lời để làm như vậy. Sau khi bạn có được một số chi tiết danh tiếng , bạn sẽ đạt được đủ đặc quyền để upvote câu trả lời mà bạn thích, đó là cách Stack Overflow nói cảm ơn bạn.
Scott Weldon


2

Sau khi thử các giải pháp khác nhau cuối cùng git clean -fđã giúp tôi.

EDIT: Tôi đã gặp vấn đề một lần nữa - đóng tất cả các quy trình phụ thuộc vào git dường như có ích (như gitbash, IDE Eclipse, v.v.)


2

Như đã nêu ở trên, một cái gì đó khác đang giữ các tập tin. Điều đó là chương trình không có vẻ đáng ngờ đối với chúng tôi. Tôi đã cố gắng thực hiện thao tác kéo git từ bảng điều khiển, trong khi mở GitKraken. Đóng GitKraken đã khắc phục sự cố.


2

Sau khi chạy lệnh

git rm -rf foo.bar

Tôi thấy lỗi

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Bởi vì một chương trình khác đang sử dụng tập tin này . Ví dụ: khi tôi chạy ứng dụng web Java trong mô hình gỡ lỗi hoặc chạy ứng dụng web trên máy chủ, tôi không thể xóa tệp nhật ký. Tắt sever ứng dụng (hoặc tắt quá trình gỡ lỗi), thử lại

git rm -rf foo.bar

Tôi thấy tập tin đã bị xóa.


1

Đây có thể là một cửa sổ gitk riêng biệt đang chạy để xem một số lịch sử git.

Chỉ cần đóng cửa sổ đó để khắc phục vấn đề đó.


1

Tôi gặp vấn đề này khi chạy git Bash và Eclipse EGit cùng một lúc. Giải pháp: đóng Eclipse. Cũng sẽ không đau khi chạy git gcnhư @khilo đã đề cập.



1

Tôi gặp vấn đề này trong Windows, bạn có thể muốn chạy git bash với tư cách quản trị viên và sau đó thực hiện các lệnh mong muốn, điều đó đã giải quyết vấn đề cho tôi.


1

Nếu bạn đang phát triển một ứng dụng web, một lý do phổ biến là quên tắt máy chủ. Ví dụ: đây có thể là một quy trình Node.js đơn giản hoặc trên các cửa sổ, quy trình IIS của bạn chạy không phô trương hơn như quy trình nền.


1

Tôi đã thử từng mẹo trên trang này và không có gì giúp được. Tôi đã làm một git fetchgit reset --hard origin/developmentcho tôi một lỗi không tưởng. Tôi không thể thiết lập lại cam kết mới nhất.

Điều gì đã giúp là kiểm tra một chi nhánh khác và sau đó kiểm tra các chi nhánh trước đó. Rất lạ nhưng nó đã giải quyết được vấn đề.


1

Nếu đóng IDE của bạn và chạy các lệnh git khác nhau được liệt kê ở đây sẽ không có ích, hãy thử giết thủ công tất cả các quy trình Java đang chạy. Tôi đã có một quá trình Java có thể còn sót lại từ nhật thực mà bằng cách nào đó giữ một tệp cấu hình mở.


1

Nếu bạn đang sử dụng Docker và chạy Windows 10, bạn có thể muốn dừng (các) thùng chứa nơi tệp có thể đang chạy. Để hiển thị trạng thái của các thùng chứa của bạn, hãy chạy

docker ps -a

Để ngăn chặn chúng, chỉ cần chạy

docker stop <container name or container id>

Điều này làm việc cho tôi khi tôi đang chạy các tệp cục bộ của mình bằng tệp .sh


1

Làm việc cho tôi, Đã thử trên windows:

Dừng máy chủ của bạn chạy từ IDE hoặc đóng IDE của bạn

Intellij / Ecllipse hoặc bất kỳ, nó sẽ hoạt động.


0

Trên Windows, đã thấy lỗi này trên một git clonerepo (khá lớn). Đã đóng SmartGit và tạm dừng phần mềm sao lưu của tôi (CrashPlan) và sau đó nó đã hoạt động. Không chắc chắn ai trong số 2 người đã thực hiện thủ thuật này, nhưng nếu chạy một trong hai, điều này cũng có thể làm điều đó cho bạn.


0

Tôi gặp vấn đề tương tự trong khi thực hiện thao tác kéo git và như đã nêu ở trên, đó là do một chương trình đang giữ các tệp đó và không cho phép kéo git. Kết thúc chương trình đã giúp. Thông thường, IDE (như Eclipse) từ nơi các tệp đang được kiểm tra sẽ giữ nó ở chế độ nền. Đóng cùng và chạy lại git kéo giải quyết vấn đề cho tôi.


0

Tôi đã có lỗi tương tự và đóng ứng dụng mở tệp đã giải quyết nó. Tôi đã có thể quay lại và nhấn "Y"

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.