Updated sync-repo.ps1

This commit is contained in:
Markus Fleschutz 2024-10-28 13:46:33 +01:00
parent 13695d0061
commit 0f4ff81b09

View File

@ -4,14 +4,14 @@
.DESCRIPTION .DESCRIPTION
This PowerShell script synchronizes a local Git repository by pull and push (including submodules). This PowerShell script synchronizes a local Git repository by pull and push (including submodules).
.PARAMETER path .PARAMETER path
Specifies the path to the Git repository Specifies the path to the Git repository (current working directory by default)
.EXAMPLE .EXAMPLE
PS> ./sync-repo.ps1 C:\MyRepo PS> ./sync-repo.ps1 C:\Repos\curl
(1/4) Searching for Git executable... git version 2.42.0.windows.1 (1/4) Searching for Git executable... git version 2.42.0.windows.1
(2/4) Checking local repository... 📂C:\MyRepo (2/4) Checking local repository... C:\Repos\curl
(3/4) Pulling remote updates... Already up to date. (3/4) Pulling remote updates... Already up to date.
(4/4) Pushing local updates... Everything up-to-date (4/4) Pushing local updates... Everything up-to-date
Synced repo 📂MyRepo in 5 sec Synced the 📂curl repo in 5s.
.LINK .LINK
https://github.com/fleschutz/PowerShell https://github.com/fleschutz/PowerShell
.NOTES .NOTES
@ -21,26 +21,26 @@
param([string]$path = "$PWD") param([string]$path = "$PWD")
try { try {
$StopWatch = [system.diagnostics.stopwatch]::startNew() $stopWatch = [system.diagnostics.stopwatch]::startNew()
Write-Host "⏳ (1/4) Searching for Git executable... " -noNewline Write-Host "⏳ (1/4) Searching for Git executable... " -noNewline
& 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/4) Checking local repository... 📂$path" Write-Host "⏳ (2/4) Checking local repository... $path"
if (!(Test-Path "$path" -pathType container)) { throw "Can't access folder: $path" } if (!(Test-Path "$path" -pathType container)) { throw "Can't access folder: $path" }
$pathName = (Get-Item "$path").Name
Write-Host "⏳ (3/4) Pulling remote updates... " -noNewline Write-Host "⏳ (3/4) Pulling remote updates... " -noNewline
& git -C "$Path" pull --all --recurse-submodules & git -C "$path" pull --all --recurse-submodules
if ($lastExitCode -ne "0") { throw "'git pull --all --recurse-submodes' failed" } if ($lastExitCode -ne "0") { throw "'git pull --all --recurse-submodes' failed" }
Write-Host "⏳ (4/4) Pushing local updates... " -noNewline Write-Host "⏳ (4/4) Pushing local updates... " -noNewline
& git -C "$Path" push & git -C "$path" push
if ($lastExitCode -ne "0") { throw "'git push' failed" } if ($lastExitCode -ne "0") { throw "'git push' failed" }
[int]$Elapsed = $StopWatch.Elapsed.TotalSeconds $pathName = (Get-Item "$path").Name
"✅ Synced repo 📂$pathName in $Elapsed sec" [int]$elapsed = $stopWatch.Elapsed.TotalSeconds
"✅ Synced the 📂$pathName repo in $($elapsed)s."
exit 0 # success exit 0 # success
} catch { } catch {
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"