Created
January 28, 2019 16:40
-
-
Save jdhitsolutions/cbdc7118f24ba551a0bb325664415649 to your computer and use it in GitHub Desktop.
A PowerShell function to get the size and number of files in the hidden .git directory.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Function Get-GitSize { | |
<# | |
.SYNOPSIS | |
Get the size of .git folder | |
.DESCRIPTION | |
When using git, it creates a hidden folder for change tracking. Because the file is hidden it is easy to overlook how large it might become. This command provides a simple mechanism for calculating the size of the .git folder. Specify the parent folder path. | |
.PARAMETER Path | |
The path to the parent folder, not the .git folder. | |
.EXAMPLE | |
PS C:\scripts\PiedPiperBox> Get-GitSize | |
Path Files Size | |
---- ----- ---- | |
C:\scripts\PiedPiperBox\ 30 18456 | |
Get the size of the .git folder from the current path The size is in bytes. | |
.EXAMPLE | |
PS C:\> Get-GitSize C:\scripts\DevOps-Courses\ -as mb | |
Path Files Size | |
---- ----- ---- | |
C:\scripts\DevOps-Courses\ 1084 163.680551528931 | |
Get the size of .git under the DevOp-Courses folder formatted as MB. | |
.EXAMPLE | |
PS C:\scripts> dir -Directory | Get-GitSize | |
Path Files Size | |
---- ----- ---- | |
C:\scripts\ADMXTests 57 33192 | |
C:\scripts\AutoLab2 46 74980 | |
C:\scripts\ComputerCertificates 37 23635 | |
C:\scripts\Copy-Command 83 57112 | |
C:\scripts\Demo Class-Based Tools 175 643881 | |
... | |
Find all folders in C:\Scripts with a .git directory and calculate the space for each. | |
.INPUTS | |
[System.String] | |
[PSCustomObject] | |
.NOTES | |
Learn more about PowerShell: http://jdhitsolutions.com/blog/essential-powershell-resources/ | |
.LINK | |
Get-ChildItem | |
.LINK | |
Measure-Object | |
#> | |
[cmdletbinding()] | |
Param ( | |
[Parameter(Position = 0, ValueFromPipeline, ValueFromPipelinebyPropertyName)] | |
[alias("pspath")] | |
[ValidateScript( {Test-Path $_})] | |
[string]$Path = ".", | |
[ValidateSet("kb", "mb", "gb")] | |
[string]$As | |
) | |
Begin { | |
Write-Verbose "[$((Get-Date).TimeofDay) BEGIN] Starting $($myinvocation.mycommand)" | |
} #begin | |
Process { | |
$full = Convert-Path -Path $Path | |
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Processing path $full" | |
$git = Join-Path -Path $full -childpath ".git" | |
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Testing $git" | |
if (Test-Path -path $git) { | |
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Measuring $git" | |
#get the total size of all files in the .git folder | |
$stat = Get-Childitem -path $git -Recurse -File | Measure-Object -Property length -sum | |
if ($As) { | |
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Calculating size as $($As.toUpper())" | |
$size = $stat.sum / "1$as" | |
} | |
else { | |
$size = $stat.sum | |
} | |
#create the output | |
[PSCustomObject]@{ | |
Path = $full | |
Files = $stat.count | |
Size = $Size | |
} #customobject | |
} #if test-path | |
else { | |
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Did not find $git" | |
} | |
} #process | |
End { | |
Write-Verbose "[$((Get-Date).TimeofDay) END ] Ending $($myinvocation.mycommand)" | |
} #end | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have a retooled version of this function at https://gist.github.com/jdhitsolutions/4b2f0acabf7bd69ac7e9c590273f36b2