| #!/bin/sh | 
 |  | 
 | # This script displays the distribution of longest common hash prefixes. | 
 | # This can be used to determine the minimum prefix length to use | 
 | # for object names to be unique. | 
 |  | 
 | git rev-list --objects --all | sort | perl -lne ' | 
 |   substr($_, 40) = ""; | 
 |   # uncomment next line for a distribution of bits instead of hex chars | 
 |   # $_ = unpack("B*",pack("H*",$_)); | 
 |   if (defined $p) { | 
 |     ($p ^ $_) =~ /^(\0*)/; | 
 |     $common = length $1; | 
 |     if (defined $pcommon) { | 
 |       $count[$pcommon > $common ? $pcommon : $common]++; | 
 |     } else { | 
 |       $count[$common]++; # first item | 
 |     } | 
 |   } | 
 |   $p = $_; | 
 |   $pcommon = $common; | 
 |   END { | 
 |     $count[$common]++; # last item | 
 |     print "$_: $count[$_]" for 0..$#count; | 
 |   } | 
 | ' |