Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I solve a folder capitalization conflict with Git on Windows?

Tags:

git

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?

like image 307
Jonathan Beerhalter Avatar asked Dec 11 '12 20:12

Jonathan Beerhalter


2 Answers

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

like image 89
tawman Avatar answered Nov 04 '22 08:11

tawman


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 to oldfolder you could try the following:

  1. 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 newFolder and execute git mv oldFolder/* newFolder/. Do the latter for each stop of the interactive rebase.

  2. Obviously, you cannot have oldFolder and newFolder be two differently capitalized versions of the same word in Windows. Hence, repeat step 1 to rename newFolder to oldfolder.

like image 33
krlmlr Avatar answered Nov 04 '22 09:11

krlmlr