không thể xóa tệp thực sự tồn tại - gây tử vong: pathspec Không phù hợp với bất kỳ tệp nào


165

không thể xóa tệp thực sự tồn tại - fatal: pathspec ... không khớp với bất kỳ tệp nào

Tôi có một tập tin dưới sự kiểm soát git mà đơn giản là sẽ không bị xóa. Lệnh thất bại là:

$ git rm .idea/workspace.xml
fatal: pathspec '.idea/workspace.xml' did not match any files

Bên dưới tôi liệt kê nội dung thư mục, chi nhánh, v.v ... Cho đến nay tôi đã thử rm từ trong thư mục và thoát ra trong trường hợp có những nhân vật ngộ nghĩnh, và tôi thực sự bị bối rối. Tôi đã tìm kiếm trên web và SO nhưng không thể tìm thấy điều này một cách cụ thể. Cảm ơn trước!

$ git branch -a
* dot-output
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/modelspace
$ 

$ git status
# On branch dot-output
# Untracked files:
# ...

$ ls .idea/
ant.xml         encodings.xml       modules.xml     workspace.xml
compiler.xml        inspectionProfiles  scopes
copyright       libraries       testrunner.xml
dictionaries        misc.xml        vcs.xml

$ ls -al
total 56
drwxr-xr-x  16 matt  staff    544 Apr 10 11:33 .
drwxr-xr-x@ 33 matt  staff   1122 Apr 10 09:40 ..
-rw-r--r--@  1 matt  staff  12292 Apr 10 11:19 .DS_Store
drwxr-xr-x  18 matt  staff    612 Apr 10 11:39 .git
-rw-r--r--   1 matt  staff     98 Mar  6 13:40 .gitignore
drwxr-xr-x  16 matt  staff    544 Apr 10 11:34 .idea
-rw-r--r--   1 matt  staff   1113 Feb 25 11:07 README
...

$ head -n 2 .idea/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">

$ git rm .idea/workspace.xml
fatal: pathspec '.idea/workspace.xml' did not match any files

CẬP NHẬT: Câu trả lời từ Nevik và Boris đã giúp rất nhiều. Tôi nhận ra rằng tôi đã bối rối bởi một số điều đang diễn ra, một số trong đó đã bị IntelliJ IDEA (một công cụ mà tôi thường yêu thích, BTW) làm cho trầm trọng hơn. Đầu tiên, thông điệp 'fatal: pathspec' từ git rm vừa không có ích vừa gây hiểu lầm (theo ý kiến ​​của người dùng vanilla này). Thứ hai, tôi đã có tệp trong .gitignore, nhưng đã xóa nó trước khi đặt câu hỏi của tôi. Tuy nhiên, nó cũng được bao gồm trong tính năng Bỏ qua tệp của IDEA độc lập với git và được hiển thị như vậy trong trình xem dự án (thay vì không bị theo dõi, như trạng thái git hiển thị). Cuối cùng, tôi đã có IDEA chạy trong khi tôi đang thử nghiệm và có vẻ như nó đang tạo lại tệp ngay sau rm của tôi. Vì vậy, điều đáng nói của tôi là nếu tôi gặp phải hành vi Git khó hiểu, hãy đảm bảo thoát IDEA và làm việc với soley trong dòng lệnh (và gitk) trong khi gỡ lỗi. Và người dùng SO đó thật tuyệt vời. Cảm ơn một lần nữa!


15
Bạn đã thử đơn giản loại bỏ các tập tin với rmthay vì git rm?
Nevik Rehnel

1
@NevikRehnel Vâng, tôi đã nghĩ sẽ thử điều đó, cảm ơn, nhưng có vẻ như IntelliJ IDEA (mà tôi đã chạy) đã hồi sinh sau mỗi lần xóa. Đừng!
Matthew Cornell

Tôi đang làm việc với Eclipse và Attlassian SourceTree ... câu hỏi của bạn giúp tôi giải quyết vấn đề này. Cảm ơn !
Manu

Bạn có thể sử dụng git clean -f .idea/workspace.xmlđể loại bỏ các tập tin không bị theo dõi.
hóa trị

Câu trả lời:


134

Tập tin của bạn .idea/workspace.xmlkhông thuộc kiểm soát phiên bản git. Bạn chưa thêm nó (kiểm tra trạng thái git / tệp không bị theo dõi) hoặc bỏ qua nó (sử dụng .gitignore hoặc .git / thông tin / loại trừ tệp)

Bạn có thể xác minh nó bằng lệnh git sau, liệt kê tất cả các tệp bị bỏ qua:

git ls-files --others -i --exclude-standard

Điều đó đã giúp rất nhiều, Boris. Cảm ơn bạn! Tôi đã cập nhật câu hỏi của mình để tóm tắt những điều đang diễn ra (IDEA, v.v.)
Matthew Cornell

23
$>git add .
$>git rm file_Name  

Nó hoạt động. Bạn thêm tệp mới bằng cách nhấp chuột phải -> tạo tệp mới và ngay lập tức xóa tệp đó sau đó. Các tập tin sẽ đi đến danh sách tập tin chưa được theo dõi.


2
Nếu nó gây ra lỗi trong khi xóa tệp, thì trong khi xóa tệp, bạn có thể sử dụng -f một cái gì đó như: $> git rm -f file_Name
Abhinav bhardwaj

1
Khi ai đó cần rmmột thư mục hoặc một tập tin, anh ấy / cô ấy không cần thêm nó vào git nếu nó chưa được liệt kê dưới sự kiểm soát phiên bản git.
Mohammad Kermani

8

Tôi biết đây không phải là vấn đề của OP, nhưng tôi đã gặp phải lỗi tương tự với một cơ sở hoàn toàn khác, vì vậy tôi chỉ muốn thả nó ở đây trong trường hợp bất kỳ ai khác cũng bị như vậy. Đây là Windows cụ thể và tôi cho rằng không ảnh hưởng đến người dùng Linux.

Tôi đã có một tập tin tài liệu LibreOffice, gọi nó final report.odt. Sau này tôi đổi trường hợp của nó thành Final Report.odt. Trong Windows, điều này thậm chí không được tính là đổi tên. final report.odt, Final Report.odt, FiNaL RePoRt.oDtĐều như nhau. Trong Linux, tất cả đều khác biệt.

Cuối cùng khi tôi đi đến git rm "Final Report.odt"và gặp lỗi "pathspec không khớp với bất kỳ tập tin nào". Chỉ khi tôi sử dụng vỏ ban đầu tại thời điểm tệp được thêm vào - git rm "final report.odt"- nó mới hoạt động.

Bài học rút ra: để thay đổi trường hợp tôi nên thực hiện:

git mv "final report.odt" temp.odt
git mv temp.odt "Final Report.odt"

Một lần nữa, đó không phải là vấn đề của OP ở đây; và sẽ không ảnh hưởng đến người dùng Linux, vì các bài đăng của anh ấy cho thấy anh ấy rõ ràng. Tôi chỉ đưa nó cho những người khác có thể gặp vấn đề này trong Windows git và vấp phải câu hỏi này.


1
Điều này có thể xảy ra trên Windows nếu bất kỳ phần nào của đường dẫn khác với trường hợp được ghi trong git. Tôi đã có thể khắc phục bằng cách sử dụng bash shell trong Windows
Rattle

3

Nếu tệp của bạn idea/workspace.xml được thêm vào .gitignore (hoặc thư mục mẹ của nó) chỉ cần addthủ công để kiểm soát phiên bản git. Ngoài ra, bạn có thể thêm nó bằng TortoiseGit. Sau lần đẩy tiếp theo bạn sẽ thấy, vấn đề của bạn đã được giải quyết.

Thêm vào phiên bản git bằng TortoiseGit


1
Khi ai đó cần rmmột thư mục hoặc một tập tin, anh ấy / cô ấy không cần thêm nó vào git nếu nó chưa được liệt kê dưới sự kiểm soát phiên bản git!
Mohammad Kermani

0

Trong trường hợp của tôi, có một thứ hoàn toàn kỳ lạ mà tôi không chắc nguyên nhân là gì. Toàn bộ thư mục đã được cam kết trước đó. Tôi có thể thấy nó trong Git, Windows Explorer và GitHub, nhưng mọi thay đổi tôi đã thực hiện đối với chính thư mục và các tệp trong đó đã bị bỏ qua. Sử dụng git check-ignoređể xem những gì đã bỏ qua nó và cố gắng loại bỏ nó bằng cách sử dụng git rm --cachedkhông có tác động. Những thay đổi đã không thể được dàn dựng.

Tôi đã sửa nó bằng cách:

  1. Tạo một bản sao của thư mục và các tập tin ở một vị trí khác.
  2. Tôi đã xóa bản gốc đã bị bỏ qua bằng cách nào đó.
  3. Cam kết và đẩy bản cập nhật này.
  4. Cuối cùng, tôi đã thêm các tập tin và thư mục trở lại và git đã nhìn thấy và phản ứng với nó như mong đợi một lần nữa.
  5. Giai đoạn và cam kết điều này, và bạn tốt để đi! :)

0

Cá nhân tôi đã vấp phải một thông báo lỗi tương tự trong kịch bản này:

Tôi đã tạo một thư mục trống , vì vậy, miễn là nó trống, việc gõ git add *sẽ không xem xét thư mục trống này. Vì vậy, khi tôi cố chạy git rm -r *hoặc đơn giản là git rm my_empty_folder/ -r,tôi đã nhận được thông báo lỗi đó.

Giải pháp đơn giản là xóa nó mà không cần git: rm -r my_empty_folder/ hoặc tạo tệp dữ liệu trong thư mục này và sau đó thêm nó ( git add my_no_long_empty_folder)


0

Những bước như vậy đã giúp tôi:

  1. git thêm.
  2. git stash

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.