Git 版控工具是大多數開發者每天都會使用到的工具之一,每位開發者電腦裡面,一定都會有很多從遠端拉下來的 Git 專案,每個專案裡面可能還會做分支來管理,同時在協作開發的過程中,要一直同步多個專案的版本,是一件繁瑣的事情,而且這件事你絕對不會想用介面來處理,用指令有簡單一些,但步驟還是有點多,如果能寫成一個指令,執行他,就能幫我們自動更新所有 Git 專案的版本,而且每個分支都能憶起更新,是不是就可以留下更多時間可以寫 Code 了呢,這篇用 PowerShell 來製作一個能夠自動更新本機 Git 專案儲存庫的指令。
首先來處理核心功能,取得 Git 專案下的所有分支名稱,然後逐一執行 git pull 將遠端最新版本的資料拉下來,:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function Receive-GitAllBranches() { $branches = git branch
foreach ($branch in $branches) { $fixedBranch = $branch.Substring(2, $branch.Length - 2)
$trackedExpression = "branch." + $fixedBranch + ".merge" $trackedBranch = git config --get $trackedExpression if (![string]::IsNullOrEmpty($trackedBranch)) { Write-Output "Pulling branch: $($fixedBranch)" git checkout "$fixedBranch" | Out-Null git pull } else { Write-Output "Branch '$($fixedBranch)' has no tracked remote" } } }
|
如果我要把所有 Git 專案都執行上面的同步遠端分支功能,我必須先知道所有 Git 專案的資料夾路徑,通常我們會將所有 Git 專案放在同一個資料夾中管理(至少我是這樣子做),因此這動作相對簡單,如果你的 Git 專案資料夾是分散的,那你可能要自己想個辦法來彙整。
因此下面這段程式碼,動作流程如下:
- 切換到根目錄
- 取得所有 Git 專案的路徑
- 逐一切換到該專案目錄下執行上面同步遠端分支的功能
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| function Sync-GitAllBranches() { param ( [String] $Target ) $Target = [string]::IsNullOrEmpty($Target) ? "C:\Users\poychang\Code\Kingston" : $Target; Write-Output "Sync git repo under '$Target'"
Set-Location -Path $Target
$folders = Get-ChildItem -Recurse -Depth 1 -Directory -Force -Filter .git | Foreach-Object { Write-Output $_.FullName.Replace(".git", [string]::Empty) } Write-Output $folders;
foreach ($folder in $folders) { if (![string]::IsNullOrEmpty($folder)) { Write-Host("Change to folder '" + $folder + "'") Set-Location -Path $folder Receive-GitAllBranches
$DefaultBranch = "Develop" git checkout $DefaultBranch } } }
|
這樣我們就有 Sync-GitAllBranches 指令可以用,透過這個 PowerShell Script 檔,就可以批次自動更新本機的 Git 專案儲存庫。
接下來只要每天早上去到咖啡之前,執行這隻指令,就可以在你拿咖啡回座位上之前,把電腦上的 Git 專案都更新到最新的版本了了。
參考資料: