Updated switch-branch.ps1

This commit is contained in:
Markus Fleschutz
2025-07-03 11:25:03 +02:00
parent 7530424b6c
commit 2cf8516323

View File

@ -5,7 +5,7 @@
This PowerShell script switches to the given branch in a Git repository and also updates the submodules. This PowerShell script switches to the given branch in a Git repository and also updates the submodules.
.PARAMETER branchName .PARAMETER branchName
Specifies the Git branch name to switch to Specifies the Git branch name to switch to
.PARAMETER pathToRepo .PARAMETER path
Specifies the file path to the local Git repository Specifies the file path to the local Git repository
.EXAMPLE .EXAMPLE
PS> ./switch-branch main PS> ./switch-branch main
@ -15,14 +15,14 @@
⏳ (4/6) Switching to branch 'main'... ⏳ (4/6) Switching to branch 'main'...
⏳ (5/6) Pulling remote updates... ⏳ (5/6) Pulling remote updates...
⏳ (6/6) Updating submodules... ⏳ (6/6) Updating submodules...
Switched repo 'rust' to 'main' branch in 22s. Repo 'rust' switched to 'main' branch in 22s.
.LINK .LINK
https://github.com/fleschutz/PowerShell https://github.com/fleschutz/PowerShell
.NOTES .NOTES
Author: Markus Fleschutz | License: CC0 Author: Markus Fleschutz | License: CC0
#> #>
param([string]$branchName = "", [string]$pathToRepo = "$PWD") param([string]$branchName = "", [string]$path = "$PWD")
try { try {
if ($branchName -eq "") { $branchName = Read-Host "Enter the branch name to switch to" } if ($branchName -eq "") { $branchName = Read-Host "Enter the branch name to switch to" }
@ -33,34 +33,34 @@ try {
& git --version & git --version
if ($lastExitCode -ne 0) { throw "Can't execute 'git' - make sure Git is installed and available" } if ($lastExitCode -ne 0) { throw "Can't execute 'git' - make sure Git is installed and available" }
Write-Host "⏳ (2/6) Checking local repository... $pathToRepo" Write-Host "⏳ (2/6) Checking local repository... $path"
if (-not(Test-Path "$pathToRepo" -pathType container)) { throw "Can't access repo folder: $pathToRepo" } if (-not(Test-Path "$path" -pathType container)) { throw "Can't access repo folder: $path" }
$result = (git -C "$pathToRepo" status) $result = (git -C "$path" status)
if ($lastExitCode -ne 0) { throw "'git status' in $pathToRepo failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git status' in $path failed with exit code $lastExitCode" }
if ("$result" -notmatch "nothing to commit, working tree clean") { throw "Git repository is NOT clean: $result" } if ("$result" -notmatch "nothing to commit, working tree clean") { throw "Git repository is NOT clean: $result" }
$repoDirName = (Get-Item "$pathToRepo").Name $repoDirName = (Get-Item "$path").Name
Write-Host "⏳ (3/6) Fetching remote updates... " -noNewline Write-Host "⏳ (3/6) Fetching remote updates... " -noNewline
& git -C "$pathToRepo" remote get-url origin & git -C "$path" remote get-url origin
if ($lastExitCode -ne 0) { throw "'git remote get-url origin' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git remote get-url origin' failed with exit code $lastExitCode" }
& git -C "$pathToRepo" fetch --all --prune --prune-tags --force & git -C "$path" fetch --all --prune --prune-tags --force
if ($lastExitCode -ne 0) { throw "'git fetch' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git fetch' failed with exit code $lastExitCode" }
"⏳ (4/6) Switching to branch '$branchName'..." "⏳ (4/6) Switching to branch '$branchName'..."
& git -C "$pathToRepo" checkout --recurse-submodules "$branchName" & git -C "$path" checkout --recurse-submodules "$branchName"
if ($lastExitCode -ne 0) { throw "'git checkout $branchName' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git checkout $branchName' failed with exit code $lastExitCode" }
"⏳ (5/6) Pulling remote updates..." "⏳ (5/6) Pulling remote updates..."
& git -C "$pathToRepo" pull --recurse-submodules & git -C "$path" pull --recurse-submodules
if ($lastExitCode -ne 0) { throw "'git pull' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git pull' failed with exit code $lastExitCode" }
"⏳ (6/6) Updating submodules..." "⏳ (6/6) Updating submodules..."
& git -C "$pathToRepo" submodule update --init --recursive & git -C "$path" submodule update --init --recursive
if ($lastExitCode -ne 0) { throw "'git submodule update' failed with exit code $lastExitCode" } if ($lastExitCode -ne 0) { throw "'git submodule update' failed with exit code $lastExitCode" }
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds [int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"Switched repo '$repoDirName' to '$branchName' branch in $($elapsed)s." "Repo '$repoDirName' switched to '$branchName' branch in $($elapsed)s."
exit 0 # success exit 0 # success
} catch { } catch {
"⚠️ ERROR: $($Error[0]) in script line $($_.InvocationInfo.ScriptLineNumber)" "⚠️ ERROR: $($Error[0]) in script line $($_.InvocationInfo.ScriptLineNumber)"