Skip to content
Git Unite fixes case sensitive file paths present in a git repository index on Windows.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Tools
src rev version number to 2.1 as issue #10 is resolved Mar 3, 2017
.gitignore
LICENSE.md
README.md
build.cmd
default.ps1

README.md

Git.Unite

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.

Options:
      --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?

Open a PowerShell window and run: build.cmd

Otherwise, open the Solution file in Visual Studio and Build

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

Thanks

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

Todd A. Wood (@iToddWood) Visit Implement IToddWood

You can’t perform that action at this time.