Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

In my git (Xcode) project, I committed a filename with improper case. Now I went to try to rename it, but when I commit, I get:

fatal: Will not add file alias 'MyProject/MyFile.h' ('MyProject/MyFilE.h' already exists in index)

I'm sure this is because git isn't used to be running on a case-preserving, case-insensitive filesystem like HFS+. But how do I get around it?

I tried renaming both files to something else, and committed that, and then renaming them back to what I want, but it still fails (with the same error message).

share|improve this question
add comment

2 Answers

up vote 8 down vote accepted

As asked and answered on stackoverflow, there's an easier way to do this that doesn't involve making a new file system in a disk image file:

Move your existing file aside, commit that move, then move it back using the case you'd like it to maintain and commit. Done.

Example:

mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"
share|improve this answer
    
in the interests of avoiding link rot we usually ask you copy the relevant portions of the answer behind the link in to the body of the answer. –  Ian C. May 18 '12 at 15:11
    
Thanks @ian-c. I was hoping that this rule does not apply to links inside the stackexchange family. –  mspasov May 18 '12 at 15:14
    
Yea, I get what you're saying but consistency is nice. –  Ian C. May 18 '12 at 15:15
    
Weird. I was positive I tried this, but today it works. Thanks. –  Ken May 20 '12 at 14:04
add comment

I have not yet found a way to fix this directly on a case insensitive file system, you need a case sensitive filesystem.

Luckily Mac OS X has good virtual disk mounting support, so you can quickly & easily get (make) a (temporary) case sensitive filesystem on your computer.

Open up Disk Utility, make a New Image and set the "Format" field to one of the case-sensitive versions of "Mac OS Extended". Also make sure you make it big enough for your repository.

Mount your new disk, check out the git repository onto it, make sure the correctly named file has the correct contents, and delete the other one. Commit and push your changes, and then you can unmount the disk image and delete it.

If you don't have a remote server to clone from (i.e. you're just running a git repo locally on your hard drive), remember you can clone directly from the other git repository on your hard drive.

share|improve this answer
    
That's awfully labour intensive. You can do this without having to spin up a new file system in a disk image file. –  Ian C. May 18 '12 at 15:08
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.