Update switch-branch.ps1

This commit is contained in:
Markus Fleschutz 2023-09-28 11:20:44 +02:00
parent cba63b08fc
commit a30ec5502c

View File

@ -3,9 +3,9 @@
Switches the Git branch Switches the Git branch
.DESCRIPTION .DESCRIPTION
This PowerShell script switches to another branch in a Git repository (including submodules). This PowerShell script switches to another branch in a Git repository (including submodules).
.PARAMETER BranchName .PARAMETER branchName
Specifies the branch name Specifies the branch name
.PARAMETER RepoDir .PARAMETER repoDir
Specifies the path to the local Git repository Specifies the path to the local Git repository
.EXAMPLE .EXAMPLE
PS> ./switch-branch main C:\MyRepo PS> ./switch-branch main C:\MyRepo
@ -15,18 +15,18 @@
(4/6) Switching to branch 'main'... (4/6) Switching to branch 'main'...
(5/6) Pulling updates... (5/6) Pulling updates...
(6/6) Updating submodules... (6/6) Updating submodules...
Switched repo 📂MyRepo to branch 'main' (took 22 sec) Switched repo 📂MyRepo to branch 'main' in 22 sec
.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]$RepoDir = "$PWD") param([string]$branchName = "", [string]$repoDir = "$PWD")
try { try {
if ($BranchName -eq "") { $BranchName = read-host "Enter name of branch to switch to" } if ($branchName -eq "") { $branchName = Read-Host "Enter the branch name to switch to" }
if ($RepoDir -eq "") { $RepoDir = read-host "Enter path to the local Git repository" } if ($repoDir -eq "") { $repoDir = Read-Host "Enter the path to the local Git repository" }
$StopWatch = [system.diagnostics.stopwatch]::startNew() $StopWatch = [system.diagnostics.stopwatch]::startNew()
@ -35,31 +35,31 @@ try {
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..." Write-Host "⏳ (2/6) Checking local repository..."
$RepoDir = Resolve-Path "$RepoDir" $repoDir = Resolve-Path "$repoDir"
if (-not(Test-Path "$RepoDir" -pathType container)) { throw "Can't access directory: $RepoDir" } if (-not(Test-Path "$repoDir" -pathType container)) { throw "Can't access directory: $repoDir" }
$Result = (git status) $Result = (git status)
if ($lastExitCode -ne "0") { throw "'git status' in $RepoDir failed with exit code $lastExitCode" } if ($lastExitCode -ne "0") { throw "'git status' in $repoDir 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 "$RepoDir").Name $repoDirName = (Get-Item "$repoDir").Name
"⏳ (3/6) Fetching updates..." "⏳ (3/6) Fetching latest updates..."
& git -C "$RepoDir" fetch --all --prune --prune-tags --force & git -C "$repoDir" 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 "$RepoDir" checkout --recurse-submodules "$BranchName" & git -C "$repoDir" 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 updates..." "⏳ (5/6) Pulling updates..."
& git -C "$RepoDir" pull --recurse-submodules & git -C "$repoDir" 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 "$RepoDir" submodule update --init --recursive & git -C "$repoDir" 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 branch '$BranchName' (took $Elapsed sec)" "✔️ Switched repo 📂$repoDirName to branch '$branchName' in $Elapsed sec"
exit 0 # success exit 0 # success
} catch { } catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"