Found myself caught by a gotcha using git on os x today. The issue is the way os x (hfs+) handles letter case in file names. File names are case insensitive, which means that
file are considered to be the same file.
To see this in action, create a new repo, touch a file named
File, add it and commit. Then try renaming it to
file, and check
$ git init # create a new repo $ touch File # create a file $ git add File # add it to the index
$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: File # $ git commit -m "add File" [master (root-commit) 2c249b7] add File 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 File
Now, we try to rename
$ ls File $ mv File file $ ls file $ git status # On branch master nothing to commit (working directory clean)
Huh? Turns out, git doesn't notice the change. Ok, let's try moving back, and explicitly telling git what we want:
$ mv file File $ git mv File file fatal: destination exists, source=File, destination=file
No joy. In fact, the best i could come up with is the rather awkward:
$ git mv File File.tmp $ git mv File.tmp file $ ls file $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: File -> file #
Finally, git's doing what I want. A slightly silly dance required, but at least it works. Better ideas on how to do this are most welcome.