Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Git Unite fixes case sensitive file paths present in a git repository index on Windows.
C# PowerShell Shell
branch: master
Failed to load latest commit information.
src Performance improvement for large repos inspired by @OlivierHamel in PR
.gitignore added gvim swp and ~ files to ignore Initial Release Added feature to fix filename casing in the git index and command lin…


Git Unite is a utility that fixes case sensitive file names and paths present in a git repository index on Windows. Since Windows is not case sensitive, the git index case sensitivity issue does not manifest itself until browsing the code repository on GitHub or cloning the repository to a case sensitive file system on Linux.

Introducing case sensitive file paths into the git index on a case insensitive operating system like Windows is easier than you think. A simple git mv .\Where\Waldo where\is\Waldo is all you need to create two separate paths in the git index, but the Windows working directory will only report one. There might be git config settings that help avoid this problem, but controlling the settings and behavior of 20+ contributors on a project team is nearly impossible.

The problem is exacerbated when hundreds of files are moved during a repository layout reorganization. If the user moving the files is not careful, these case sensitive path names will pollute the git index but appear fine in the working directory. Cleaning up these case sensitive file path issues on Windows is tedious, and this is where Git Unite helps out.

Git Unite will search the git repository index for file names and paths that do not match the same case that Windows is using. For each git index path case mismatch found, Git Unite will update the git index entry with the case reported by the Windows file system.

Usage: Git.Unite [OPTIONS]+ repository
Unite the git repository index file paths with current Windows case usage.
If no repository path is specified, the current directory is used.

      --dry-run              dry run without making changes
  -d, --directory-only       only perform directory case changes
  -f, --file-only            only perform filename case changes
  -h, --help                 show this message and exit

Example Usage

C:\demo [master]> Git.Unite C:\demo
C:\demo [master +0 ~1 -0]> git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#       renamed:    where/is/Waldo -> Where/Is/Waldo

A more detailed example scenario and usage is available on my blog post Git Unite - Fix Case Sensitive File Paths on Windows

How To Build It?

From a command window run: build.bat

On some systems you will need to run 'set EnableNuGetPackageRestore=true' to succesfully compile.

Otherwise, open the Solution file in Visual Studio 2010 and Build

The binary will be in git-unite\src\Git.Unite\bin\Debug


This software is open source and check the file for more details.

Todd A. Wood (@iToddWood) Visit Implement IToddWood

Something went wrong with that request. Please try again.