git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Does changing filename case breaks git's rename heuristic?

From
Dan Loewenherz <dloewenherz@gmail.com>
Date
Aug 27, 2010, 04:57 UTC
Message-ID
<AANLkTinxvj85Jzb-ykK0=MmRHkz8aQzmVxexC8H+Xgno@mail.gmail.com>
Hi all,

I may be mistaking a design decision as a bug, but I wanted to throw this out to the list to make sure. I think that re-enacting it will be the best way to explain it.

$ mkdir test
$ cd test
$ git init
$ cat > readme
This is a test file.
^D
$ git commit -am "first commit"
[master (root-commit) fae0d05] first commit
 1 files changed, 1 insertions(+), 0 deletions(-)
For personal reasons, I now want readme to be uppercase.
$ mv readme README
$ cat > README
This is the revised README.
$ git status -sb
## master
 M readme
$ git add README
$ git status -sb
## master
 M readme

At this point, I'm thinking that git is confused. Even though I've added the README file, it still isn't staged. I follow up with the obvious:

$ git add readme
$ git status -sb
## master
M  readme
$ git commit -m "change filename"
[master ecc009f] change filename
 1 files changed, 1 insertions(+), 1 deletions(-)

It kind of works, but not quite, since git still thinks the file is called readme. I'd like to rename it, but whenever I run:

$ git mv readme README fatal: destination exists, source=readme, destination=README

How about this:

$ mv README README.temp $ git mv readme README fatal: bad source, source=readme, destination=README

The only workable solution was this:

$ git mv readme readme.temp $ git mv readme.temp README

I'm guessing this all has to do in some part with the logic behind git's strategy for detecting renames. This case probably slipped under the radar.

-Dan
Next: Ramkumar Ramachandra
Message 1 of 8 in “Does changing filename case breaks git's rename heuristic?”
  1. Dan LoewenherzAug 27, 2010
  2. Ramkumar RamachandraAug 27, 2010
  3. Michael J GruberAug 27, 2010
  4. Dan LoewenherzAug 27, 2010
  5. Michael J GruberAug 27, 2010
  6. Stephen BashAug 27, 2010
  7. Jay SoffianAug 27, 2010
  8. Ævar Arnfjörð BjarmasonAug 28, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.