一、背景
打個比如,你在Github
上的代碼庫需要批量的定時備案到本地的Gitlab
上,以便Github
不能訪問時,可以繼續編寫,這時候我們可以基於Power Automate Desktop
來實現一個簡單的批量備份處理。
二、創建流任務
創建名為備份代碼庫
的流任務。
三、添加主流程
3.1 主流程
0. 概覽
1. 顯示選擇文件夾對話框,標題為請選擇文件夾
,彈窗交互選擇需要備份的項目文件夾根目錄,存值為變量BackUpRootDir
中。
如果常用位置,可以設置初始文件夾位置,以免每次都選來選去。
2. 獲取文件夾中的子文件夾,來拿到所有需要備份的項目文件夾。
%BackUpRootDir%
從需要備份的項目文件夾根目錄BackUpRootDir
中提取所有的項目文件夾,得到BackUpProjectFolders
列表。
3. ForEach遍歷所有項目文件夾,開始執行備份處理。
在Power Automate
中支持循環操作For Each
的,我們可以基於它建立一個圍繞BackUpProjectFolders
結果集的遍歷任務,我們為每個遍歷項取名為BackUpProject
。
可視化效果圖如下:
4. 拆分文本,准備得到項目名稱,存值於SplitBackUpPaths
中。
%BackUpProject.FullName.ToLower%
通過自定義
分隔符\
,我們針對BackUpProject
的全路徑進行小寫處理,然后通過自定義分隔符進行拆分,得到一個臨時的變量SplitBackUpPaths
5. 設置變量,從拆分后的列表中提取項目名稱,存值於變量ProjectName
中。
一般來說,我們拿SplitBackUpPaths
的最后一項就是項目名稱ProjectName
了,這個也可以理解。
%SplitBackUpPaths[SplitBackUpPaths.Count - 1]%
6. 設置變量,變量名為backUpServerName
,預設值遠程倉庫地址在本地的名稱。
為了后面的方便,這里我們將遠程倉庫在本地的名稱設置一個變量,名為backUpServerName
,注意要繞開origin
,因為origin
一般是默認的遠程倉庫地址名稱。
7. 設置變量,變量名為backUpServerHost
,預設值遠程倉庫地址的域名和端口。
8. 設置變量,變量名為backUpGroupName
,預設值遠程倉庫地址的分組名稱。
通常我們建議使用分組功能來管理Git倉庫,采用分組之后,最終ssh地址中就會存在分組的名稱,這里我們做個設定。
9. 運行PowerShell腳本,添加備份倉庫服務器地址,這個動作我們叫AddRemoteServerEndPoint
。
通過上訴步驟,我們就可以基於backUpServerHost
、backUpGroupName
、ProjectName
拼接出最終的SSH地址了。
cd %BackUpProject.FullName%
git remote add %backUpServerName% ssh://git@%backUpServerHost%/%backUpGroupName%/%ProjectName%.git
我們先切換到BackUpProject
目錄,然后通過Git CLI
的命令git remote add
來添加一個備份倉庫服務器的相關信息,其中backUpServerName
是給遠程地址取一個名字、ssh://
開頭的是遠程地址對應該項目的地址,這個動作我們命名為AddRemoteServerEndPoint
。
注意,如果遠程該項目還沒有倉庫地址,后續Push
的時候,會自動創建ProjectName
的倉庫。
10. 拆分文本,准備要備份的Git分支名稱,存值於變量GitBranchNames
中。
我們可以利用拆分文本,來快速得到我們想要的Git分支名稱列表GitBranchNames
,這個后續需要用到的。
master,develop,test,uat
以自定義
分隔符,
來進行拆分文本,將拆分后的結果存到變量GitBranchNames
中。
11. ForEach遍歷所有分支名稱,開始執行分支備份。
我們可以基於它建立一個圍繞GitBranchNames
結果集的遍歷任務,我們為每個遍歷項取名為GitBranchName
。
可視化效果圖如下:
12. 運行PowerShell腳本,來切換到指定分支,這個動作我們命名為CheckOutBranch
。
cd %BackUpProject.FullName%
git checkout -b %GitBranchName% origin/%GitBranchName%
我們先切換到BackUpProject
目錄,然后通過Git CLI
的命令git checkout
來從遠程的origin/GitBranchName
分支為基礎簽出一個本地的名為GitBranchName
的分支。
注意,這時候可能本地已經存在GitBranchName
分支了,這里為了偷懶,我們直接設置這個操作出錯
時策略為繼續流運行
即可,來忽略這個異常情況。
13. 運行PowerShell腳本,拉取指定分支最新修改,這個動作我們命名為PullBranchLatest
。
cd %BackUpProject.FullName%
git switch %GitBranchName%
git pull
我們先切換到BackUpProject
目錄,然后通過Git CLI
的命令git switch
來切換到指定的GitBranchName
分支,接着通過命令git pull
來拉取這個分支當前最新遠程修改即可。
14. 運行PowerShell腳本,推送指定分支到遠程倉庫,這個動作我們命名為PushBranchToRemote
。
cd %BackUpProject.FullName%
git push %backUpServerName% -f %GitBranchName%
我們先切換到BackUpProject
目錄,然后通過Git CLI
的命令git push
來把本地的GitBranchName
分支強制-f
推送到遠程倉庫backUpServerName
。
15. 在子級For-Each外,運行PowerShell腳本,移除備份倉庫服務器地址,這個動作我們命名為DelRemoteServerEndPoint
。
cd %BackUpProject.FullName%
git remote remove %backUpServerName%
我們先切換到BackUpProject
目錄,然后通過Git CLI
的命令git remote remove
來刪除backUpServerName
這個遠程地址即可。