Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

git - Same files listed as both untracked and deleted

Running git status in a Git repository, I get:

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    path/to/file1.sql 
        deleted:    path/to/file2.sql 
        deleted:    path/to/file3.sql 

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        path/to/file1.sql
        path/to/file2.sql
        path/to/file3.sql

no changes added to commit (use "git add" and/or "git commit -a")

Every other file is fine. I already tried reset, checkout, etc., and also cloning the repository again (we use a centralized server). Nothing solves the issue, but only for a specific user using Windows. The problem does not appear on Linux.

Additional information:

  • git diff shows no output.
  • I've already tried setting core.autocrlf to false.
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It was actually a very simple thing: the files had been committed with a space at the end of the filename. Apparently Windows cannot handle this, and automatically removes the space every time (after clone, after checkout, etc.).

So Git shows the correct information, the file "path/to/file1.sql " has been deleted, and the file "path/to/file1.sql" is new (sorry this didn't show in the question, now that I now I corrected it to show the space in the sample Git output).

I couldn't notice this at first, because I simply lsed the content of the directory /path/to/ on Linux after seeing that git status was fine there, and tried to debug everything in Windows (not possible, unless you somehow notice that space by selecting the right part of the Git output). While I was performing an additional check on the filenames (on Linux) thanks to Vampire's comment I obtained the strange result

ls /path/to/file1.sql
ls: file not found

After pressing TAB and seeing "/path/to/file1.sql " I figured it out. I think the problem is quite trivial, but since it doesn't happen everyday that someone commits files with a space at the end of the name, I think it can take a while to figure out there is no real problem with Git.

So I'm going to leave the question and the answer for now, if you disagree just downvote and I'll delete everything.

Thanks to everyone who helped in the comments.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...