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.

  • Which tag I am at GIT
  • With Git, how to find who modified directory contents?
  • GoodData: JavaScript SDK setup - repo cloning error
  • What is the git equivalent of of hg outgoing (hg out) or hg incoming (hg in)?
  • Git post receive hook with sudo -u not working for some users
  • How can I alert developers they need to run certain commands after they pull my commit (in version control/git)?
  • What’s the correct way to fix a folder capitalization problem in git on Windows?

  • In Git, can I view all commits from a branch merge?
  • Git gets file hungry every once in a while
  • Git And SQL Server MDF Files
  • Folding git commits
  • error using git push
  • EGIT does not add origin github remote
  • 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 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.

    git config --global core.ignorecase true should solve your problem on Windows.

    [Edited]
    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.)

    Git Baby is a git and github fan, let's start git clone.