Script: *remove-tag.ps1*
========================

This PowerShell script removes a Git tag, either locally, remote, or both.

Parameters
----------
```powershell
PS> ./remove-tag.ps1 [[-TagName] <String>] [[-Mode] <String>] [[-RepoDir] <String>] [<CommonParameters>]

-TagName <String>
    Specifies the Git tag name
    
    Required?                    false
    Position?                    1
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false

-Mode <String>
    Specifies either locally, remote, or both
    
    Required?                    false
    Position?                    2
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false

-RepoDir <String>
    Specifies the path to the Git repository
    
    Required?                    false
    Position?                    3
    Default value                "$PWD"
    Accept pipeline input?       false
    Accept wildcard characters?  false

[<CommonParameters>]
    This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, 
    WarningVariable, OutBuffer, PipelineVariable, and OutVariable.
```

Example
-------
```powershell
PS> ./remove-tag v1.7 locally

```

Notes
-----
Author: Markus Fleschutz | License: CC0

Related Links
-------------
https://github.com/fleschutz/PowerShell

Script Content
--------------
```powershell
<#
.SYNOPSIS
	Removes a Git tag (locally, remote, or both)
.DESCRIPTION
	This PowerShell script removes a Git tag, either locally, remote, or both.
.PARAMETER TagName
	Specifies the Git tag name
.PARAMETER Mode
	Specifies either locally, remote, or both
.PARAMETER RepoDir
	Specifies the path to the Git repository
.EXAMPLE
	PS> ./remove-tag v1.7 locally
.LINK
	https://github.com/fleschutz/PowerShell
.NOTES
	Author: Markus Fleschutz | License: CC0
#>

param([string]$TagName = "", [string]$Mode = "", [string]$RepoDir = "$PWD")

try {
	if ($TagName -eq "") { $TagName = read-host "Enter new tag name" }
	if ($Mode -eq "") { $Mode = read-host "Remove the tag locally, remote, or both" }

	$StopWatch = [system.diagnostics.stopwatch]::startNew()

	if (-not(test-path "$RepoDir" -pathType container)) { throw "Can't access directory: $RepoDir" }

	$Null = (git --version)
	if ($lastExitCode -ne "0") { throw "Can't execute 'git' - make sure Git is installed and available" }

	if (($Mode -eq "locally") -or ($Mode -eq "both")) {
		"Removing local tag..."
		& git -C "$RepoDir" tag --delete $TagName
		if ($lastExitCode -ne "0") { throw "'git tag --delete' failed with exit code $lastExitCode" }
	}

	if (($Mode -eq "remote") -or ($Mode -eq "both")) {
		"Removing remote tag..."
		& git -C "$RepoDir" push origin :refs/tags/$TagName
		if ($lastExitCode -ne "0") { throw "'git push origin' failed with exit code $lastExitCode" }
	}

	[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds
	"✔️ removed tag '$TagName' in $Elapsed sec"
	exit 0 # success
} catch {
	"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
	exit 1
}
```

*(generated by convert-ps2md.ps1 using the comment-based help of remove-tag.ps1 as of 08/15/2024 09:50:53)*
