Git Unite fixes case sensitive file paths present in a git repository index on Windows.
PowerShell C# Batchfile
Switch branches/tags
Nothing to show
Latest commit ecfce4d Mar 3, 2017 Todd A. Wood rev version number to 2.1 as issue #10 is resolved
Permalink
Failed to load latest commit information.
Tools added psake tooling to support msbuild with C# 6 support Feb 7, 2017
src rev version number to 2.1 as issue #10 is resolved Mar 3, 2017
.gitignore added gvim swp and ~ files to ignore Jan 28, 2013
LICENSE.md Initial Release Jan 13, 2013
README.md README formatting Feb 7, 2017
build.cmd
default.ps1 updated default.ps1 to not perform nuget restore by default since pac… Feb 8, 2017

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