How do I solve a folder capitalization conflict with Git on Windows?
I’m doing a git rebase, and I’m stuck because in one commit I have a folder named Proto, but in the other commit I have a folder named proto. It was an honest mistake and should have been Proto in both cases. The best I can figure out here is to try deleting the folder from both commits and then trying the rebase again, but there has to be a better way.
In the past, when I’ve run into capitalization problems with a file, I’ve used git mv, but with the folder it won’t let me run git mv, and I don’t know why.
What’s the correct way to fix a folder capitalization problem in git on Windows?
4 Solutions collect form web for “How do I solve a folder capitalization conflict with Git on Windows?”
We encountered a similar issue in our git repository on Windows when a large number of files were moved around to different directories.
I fixed our issue the first time manually by cloning the repository to a Linux VM and running a bash script with
git mv commands to fix the file path case issue. This was a painful process so I decided to develop a utility that automates the process.
Git Unite is a .NET console application I wrote using the libgit2sharp library. The program identifies all git index entries with file path case different from what the Windows file system reports.
I wrote a blog posting detailing the tool, usage, and history behind it at Git Unite – Fix Case Sensitive File Paths on Windows
Smuggling folder renames into Git history is difficult, because folders are not tracked — only files in the folders. Assuming that you want to rename
oldfolder you could try the following:
Rebase interactively from the point where you first created a file in
oldFolder. Edit every commit that adds files to this folder. When interactive rebase stops, create
git mv oldFolder/* newFolder/. Do the latter for each stop of the interactive rebase.
Obviously, you cannot have
newFolderbe two differently capitalized versions of the same word in Windows. Hence, repeat step 1 to rename
git config --global core.ignorecase true should solve your problem on Windows.
I suspect you need to “git mv” each file in the folder to a temp name like ‘ProtoX’, then “git mv” the temp-named files to ‘Proto’, as Git does not track folders by themselves — only the files in the folders.
The double “git mv” works around Windows case-insensitive filesystems. (You should be able to move directly from ‘proto’ to ‘Proto’ on case-sensitive filesystems, like Linux.)