DEV Community

Cover image for Git basics: Help my case-sensitive filename changes don't commit
Chris Bongers
Chris Bongers

Posted on • Originally published at daily-dev-tips.com

Git basics: Help my case-sensitive filename changes don't commit

Let's say we have a file called timezone.js, and we commit this file to Git. All good and well.

File added to Git

But then we realized the whole repo used "time zone" with a space.

Apparently, there are three correct spellings of timezone: timezone, time zone, and time-zone.

With this in mind, we might want to uniform our file system and rename this file to timeZone.js. Let's go ahead and make that change.

File changed to git change

In the above image, you see that I renamed the filename but only changed case sensitivity.
Git doesn't pick this up.

So how can we commit this filename change?

Committing a single filename change

If it's just one file, the easiest way to do this is to run the following command.

git mv timezone.js timeZone.js
Enter fullscreen mode Exit fullscreen mode

This means move and can be used to move or rename a file.

Change detected in git

You can now commit and push this change, and it will reflect in Git as well.

Handling multiple case-sensitive file changes

If you happen to do changes on more than one file, you can, of course, use option one to do all of them by hand.

Or you can follow the following steps.

  1. Remove all of git cache
git rm -r --cached .
Enter fullscreen mode Exit fullscreen mode

This command will remove the Git cached version of all files/folders in this directory.
Meaning you will see all files show up in your git changes, but don't worry. The next step will fix it.

Remove git cache

  1. Re-add current status
git add --all .
Enter fullscreen mode Exit fullscreen mode

This command re-adds all the files, making only the ones that have changes appear.

Case sensitive file git commit

You can now go ahead and commit and push this change to reflect on Git.

Case sensitive file committed

So what about folders?

I've added a folder called folder to my git repo.

Folder pushed to Git

And now let's rename it to Folder.

Again, this change is not picked up by Git as we saw with the file.

So let's try option one:

git mv folder Folder
Enter fullscreen mode Exit fullscreen mode

This hits us with the following message:

fatal: renaming 'folder' failed: Invalid argument
Enter fullscreen mode Exit fullscreen mode

This only happens on case insensitive systems like Mac.

As a fix for this option, we could run the following command.

git mv folder tmpFolder && mv tmpFolder Folder
Enter fullscreen mode Exit fullscreen mode

This will work since we first rename it to something completely different.
Then rename it back but with the right case sensitivity.

But let's try option two to see what happens.

git rm -r --cached .
git add --all .     
Enter fullscreen mode Exit fullscreen mode

Capital folder

And it worked! So for me, the safe bet is always to use the remove cache function.

There are some other ways of doing this as well.
What is your preferred way of renaming a case-sensitive file/folder in Git?

You can find my test on the following GitHub repo.

Thank you for reading, and let's connect!

Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter

Top comments (4)

Collapse
 
rfornal profile image
bob.ts

I've bookmarked the article for the next time I run into this. Thanks for the excellent documentation!

Collapse
 
dailydevtips1 profile image
Chris Bongers

Awesome! Thanks Bob
Glad it helps

Collapse
 
sm0ke profile image
Sm0ke

This is useful. Ty!

Collapse
 
dailydevtips1 profile image
Chris Bongers

Glad you find it useful!
Thanks ๐ŸŽ‰