PowerShell/docs/clean-repo.md
2024-08-15 09:51:46 +02:00

105 lines
3.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Script: *clean-repo.ps1*
========================
This PowerShell script deletes all untracked files and folders in a local Git repository (including submodules).
NOTE: To be used with care! This cannot be undone!
Parameters
----------
```powershell
PS> ./clean-repo.ps1 [[-path] <String>] [<CommonParameters>]
-path <String>
Specifies the file path to the local Git repository (current working directory by default)
Required? false
Position? 1
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> ./clean-repo.ps1 C:\Repos\rust
(1/4) Searching for Git executable... git version 2.45.0
(2/4) Checking local repository... C:\Repos\rust
(3/4) Removing untracked files in repository...
(4/4) Removing untracked files in submodules...
Cleaned up 📂rust repository in 2s.
```
Notes
-----
Author: Markus Fleschutz | License: CC0
Related Links
-------------
https://github.com/fleschutz/PowerShell
Script Content
--------------
```powershell
<#
.SYNOPSIS
Cleans a repo
.DESCRIPTION
This PowerShell script deletes all untracked files and folders in a local Git repository (including submodules).
NOTE: To be used with care! This cannot be undone!
.PARAMETER path
Specifies the file path to the local Git repository (current working directory by default)
.EXAMPLE
PS> ./clean-repo.ps1 C:\Repos\rust
⏳ (1/4) Searching for Git executable... git version 2.45.0
⏳ (2/4) Checking local repository... C:\Repos\rust
⏳ (3/4) Removing untracked files in repository...
⏳ (4/4) Removing untracked files in submodules...
✔️ Cleaned up 📂rust repository in 2s.
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$path = "$PWD")
try {
$stopWatch = [system.diagnostics.stopwatch]::startNew()
Write-Host "⏳ (1/4) Searching for Git executable... " -noNewline
& git --version
if ($lastExitCode -ne "0") { throw "Can't execute 'git' - make sure Git is installed and available" }
"⏳ (2/4) Checking local repository... $path"
if (-not(Test-Path "$path" -pathType container)) { throw "Can't access repo folder '$path' - maybe a typo or missing folder permissions?" }
$repoName = (Get-Item "$path").Name
"⏳ (3/4) Removing untracked files in repository..."
& git -C "$path" clean -xfd -f # to delete all untracked files in the main repo
if ($lastExitCode -ne "0") {
Write-Warning "'git clean' failed with exit code $lastExitCode, retrying once..."
& git -C "$path" clean -xfd -f
if ($lastExitCode -ne "0") { throw "'git clean' failed with exit code $lastExitCode" }
}
"⏳ (4/4) Removing untracked files in submodules..."
& git -C "$path" submodule foreach --recursive git clean -xfd -f # to delete all untracked files in the submodules
if ($lastExitCode -ne "0") { throw "'git clean' in the submodules failed with exit code $lastExitCode" }
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"✔️ Cleaned up 📂$repoName repository in $($elapsed)s."
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
```
*(generated by convert-ps2md.ps1 using the comment-based help of clean-repo.ps1 as of 08/15/2024 09:50:46)*