一、背景
打個比如,你在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這個遠程地址即可。
四、測試驗證
運行效果

Power Automate Desktop/RPA 愛好者交流群

