Skip to content

tawman/git-unite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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