mirror of
https://github.com/fleschutz/PowerShell.git
synced 2024-11-29 11:24:27 +01:00
4.3 KiB
4.3 KiB
Script: new-branch.ps1
This PowerShell script creates a new Git branch in a local repository and switches to it.
Parameters
PS> ./new-branch.ps1 [[-newBranch] <String>] [[-pathToRepo] <String>] [<CommonParameters>]
-newBranch <String>
Specifies the new Git branch name (check the allowed characters)
Required? false
Position? 1
Default value
Accept pipeline input? false
Accept wildcard characters? false
-pathToRepo <String>
Specifies the file path to the local repository (current working directory per default)
Required? false
Position? 2
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
PS> ./new-branch.ps1 test123 C:\Repos\rust
⏳ (1/6) Searching for Git executable... git version 2.42.0.windows.2
⏳ (2/6) Checking Git repository...
⏳ (3/6) Fetching updates...
⏳ (4/6) Creating new branch...
⏳ (5/6) Pushing updates...
⏳ (6/6) Updating submodules...
✔️ Created branch 'test123' in 📂rust repository in 18 sec (based on 'main')
Notes
Author: Markus Fleschutz | License: CC0
Related Links
https://github.com/fleschutz/PowerShell
Script Content
<#
.SYNOPSIS
Creates a new branch
.DESCRIPTION
This PowerShell script creates a new Git branch in a local repository and switches to it.
.PARAMETER newBranch
Specifies the new Git branch name (check the allowed characters)
.PARAMETER pathToRepo
Specifies the file path to the local repository (current working directory per default)
.EXAMPLE
PS> ./new-branch.ps1 test123 C:\Repos\rust
⏳ (1/6) Searching for Git executable... git version 2.42.0.windows.2
⏳ (2/6) Checking Git repository...
⏳ (3/6) Fetching updates...
⏳ (4/6) Creating new branch...
⏳ (5/6) Pushing updates...
⏳ (6/6) Updating submodules...
✔️ Created branch 'test123' in 📂rust repository in 18 sec (based on 'main')
.LINK
https://github.com/fleschutz/PowerShell
.NOTES
Author: Markus Fleschutz | License: CC0
#>
param([string]$newBranch = "", [string]$pathToRepo = "$PWD")
try {
if ($newBranch -eq "") { $newBranch = Read-Host "Enter the new Git branch name" }
$stopWatch = [system.diagnostics.stopwatch]::startNew()
Write-Host "⏳ (1/6) Searching for Git executable... " -noNewline
& git --version
if ($lastExitCode -ne "0") { throw "Can't execute 'git' - make sure Git is installed and available" }
Write-Host "⏳ (2/6) Checking Git repository..."
if (-not(Test-Path "$pathToRepo" -pathType container)) { throw "Can't access directory: $pathToRepo" }
$repoName = (Get-Item "$pathToRepo").Name
"⏳ (3/6) Fetching updates..."
& git -C "$pathToRepo" fetch --all --recurse-submodules --prune --prune-tags --force
if ($lastExitCode -ne "0") { throw "'git fetch' failed with exit code $lastExitCode" }
$currentBranch = (git -C "$pathToRepo" rev-parse --abbrev-ref HEAD)
if ($lastExitCode -ne "0") { throw "'git rev-parse' failed with exit code $lastExitCode" }
"⏳ (4/6) Creating new branch..."
& git -C "$pathToRepo" checkout -b "$newBranch"
if ($lastExitCode -ne "0") { throw "'git checkout -b $newBranch' failed with exit code $lastExitCode" }
"⏳ (5/6) Pushing updates..."
& git -C "$pathToRepo" push origin "$newBranch"
if ($lastExitCode -ne "0") { throw "'git push origin $newBranch' failed with exit code $lastExitCode" }
"⏳ (6/6) Updating submodules..."
& git -C "$pathToRepo" submodule update --init --recursive
if ($lastExitCode -ne "0") { throw "'git submodule update' failed with exit code $lastExitCode" }
[int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"✔️ Created branch '$newBranch' in 📂$repoName repository in $elapsed sec (based on '$currentBranch')"
exit 0 # success
} catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
exit 1
}
(generated by convert-ps2md.ps1 using the comment-based help of new-branch.ps1 as of 03/27/2024 17:36:29)