Public/Invoke-Gitt.ps1
|
<#
.SYNOPSIS Git helpers entry point mirroring git's subcommand style. .DESCRIPTION Dispatches to GittHelpers module functions using git-style subcommand syntax. Supported subcommands: gitt clone <url> [args] -> Invoke-GitCloneBare gitt worktree add [args] -> New-GitWorktree gitt worktree remove <path> [args] -> Remove-GitWorktree gitt save -Message <msg> [args] -> Save-GitWorktree gitt sync [args] -> Sync-GitBranches gitt prune [args] -> Remove-StaleGitBranches .EXAMPLE gitt clone https://github.com/org/repo.git .EXAMPLE gitt worktree add -Feature login -Description "Add OAuth" .EXAMPLE gitt worktree remove .\feature\login .EXAMPLE gitt save -Message "Fix null ref" .EXAMPLE gitt sync .EXAMPLE gitt prune -DryRun #> function Invoke-Gitt { [CmdletBinding()] param( [Parameter(Mandatory, Position = 0)] [string] $Subcommand, [Parameter(Position = 1, ValueFromRemainingArguments)] [object[]] $Arguments ) switch ($Subcommand.ToLowerInvariant()) { 'clone' { Invoke-GitCloneBare @Arguments } 'worktree' { if (-not $Arguments -or $Arguments.Count -eq 0) { Write-Error "Usage: gitt worktree <add|remove> [args]" return } $action = $Arguments[0].ToString().ToLowerInvariant() $remaining = if ($Arguments.Count -gt 1) { $Arguments[1..($Arguments.Count - 1)] } else { @() } $parsed = ConvertTo-ParamHashtable -ArgumentList $remaining $named = $parsed.Named $pos = $parsed.Positional switch ($action) { 'add' { New-GitWorktree @named @pos } 'remove' { Remove-GitWorktree @named @pos } default { Write-Error "Unknown worktree action '$action'. Use: add, remove" } } } 'save' { $parsed = ConvertTo-ParamHashtable -ArgumentList $Arguments $named = $parsed.Named $pos = $parsed.Positional Save-GitWorktree @named @pos } 'sync' { Sync-GitBranches @Arguments } 'prune' { Remove-StaleGitBranches @Arguments } default { Write-Error "Unknown subcommand '$Subcommand'. Valid subcommands: clone, worktree, save, sync, prune" } } } Set-Alias -Name gitt -Value Invoke-Gitt |