Types/System.IO.FileInfo/GitChanges.ps1
<# .SYNOPSIS Get Changes for a given file .DESCRIPTION Gets changes from git for a given file. Can provide a timespan, series of numbers, date, or pair of dates. #> $byDate = @() $byNumber = @() $byTimespan = @() foreach ($arg in $args) { if ($arg -as [int] -ne $null) { $byNumber += $arg -as [int] } elseif ($arg -is [object[]]) { $byNumber += $arg } elseif ($arg -as [DateTime]) { $byDate+= $arg -as [DateTime] } elseif ( $arg -as [TimeSpan] ) { $byTimespan+= $arg -as [TimeSpan] } } Push-Location $this.Directory if ($byTimespan) { git log -Since ([DateTime]::Now - $byTimespan[0]) $this.Name } elseif ($byDate) { if ($byDate.Length -gt 1) { $first, $second = $byDate | Sort-Object git log -After $second -Before $first $this.Name } elseif ($byDate.Length -eq 1) { git log -Since $byDate[0] $this.Name } else { throw "Can only list Changes between two dates" } } elseif ($byNumber.Length) { $maxNumber = $byNumber | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum $maxNumber = $maxNumber + 1 $anyNegative = @($byNumber -lt 0).Length if ($anyNegative) { @(git log $this.Name)[@($byNumber -as [int[]])] } else { @(git log -n $maxNumber $this.Name)[@($byNumber -as [int[]])] } } else { git log $this.Name } Pop-Location |