一、背景

打个比如,你在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

通过上诉步骤,我们就可以基于backUpServerHostbackUpGroupNameProjectName拼接出最终的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 爱好者交流群

流程自动化RPA,Power Automate Desktop系列 - 批量备份Git仓库做好灾备的更多相关文章

  1. 流程自动化RPA,Power Automate Desktop系列 - 不讲武德的Windows10内置应用

    简介 Power Automate Desktop 扩展Power Automate中的现有机器人流程自动化(RPA)功能,并使您能够自动化所有重复的桌面流程. 使用预生成的拖放操作或记录您自己的桌面 ...

  2. 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包

    一.背景 之前写过的几个WPF小工具,每次发布都需要给它打安装包和升级包,涉及到一些系列繁琐的手工操作,有了Power Automate Desktop,于是便寻思着能不能做成一个自动化的流来使用. ...

  3. 流程自动化RPA,Power Automate Desktop系列 - DotNet Core打包并发布Nuget Package

    一.背景 DotNet Core通常基于Nuget来实现包管理,如果你想要把自己的实现共享给其他人,通常我们需要把本地项目打包好,然后发布到对应的Nuget Server上,以便于其他人可以查找.安装 ...

  4. 流程自动化RPA,Power Automate Desktop系列 - 发布文档中心

    一.背景 内网中有一个基于VuePress搭建的静态文档中心,但是每次修改后都需要重新Build一次才行,之前都是手动执行命令,现在可以基于Power Automate Desktop来创建任务了. ...

  5. 流程自动化RPA,Power Automate Desktop系列 - 构建VuePress文档中心脚手架

    一.背景 笔者曾基于VuePress搭建过一个文档中心,但是在实现在线管理功能之前,很多时候,新建文档需要手动处理很多数据,看有没有可能实现一个脚手架来处理这些问题,所谓脚手架,就是进行文档初始化的一 ...

  6. 批量修改git仓库地址脚本

    前言   公司的代码都存放在自己搭建的gitlab上面.之前由于老板升级gitlab.导致下面有个叫做"api"的groups无法访问.通过无所不能的谷歌才知道.在gitlab在某 ...

  7. 使用powershell批量更新git仓库

    Get-ChildItem D:\GitHub\NetCore | ForEach-Object -Process{ cd $_.name; git pull; cd ../ }

  8. 一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码

    概述 Power Automate for Desktop (以下简称PAD)是微软推出的一款针对Windows桌面端的免费RPA(机器人流程自动化)工具,它目前默认会随着Windows 11安装,但 ...

  9. Power Platform之Power Automate新增RPA功能

    ​ 什么是RPA RPA( Robotic Process Automation 机器人流程自动化软件),是一种新型的人工智能的虚拟流程自动化机器人.RPA的核心是通过自动化.智能化技术来“替代人”进 ...

随机推荐

  1. java中基本数据类型、包装类及字符串之间的相互转换

    基本数据类型:不支持面向对象的编程机制(没有属性和方法),即不支持面向对象,之所以提供8中基本数据类型,是为了方便常规数据的处理. 包装类:通过包装类可以将基本数据类型的值包装为引用数据类型的对象,使 ...

  2. [Linux] Linux命令行与Shell脚本编程大全 Part.3

    Shell Shell 是管理命令行的程序(包在内核外的壳) 不同Shell版本演化关系如下,一般Linux中会自动安装Sh和Bash(Bash比Sh好写,Zsh最好用) .bashrc:Bash 的 ...

  3. [刷题] 167 Two Sum II

    要求 升序数组 找到两个数使得它们相加之和等于目标数 函数返回两个下标值(下标从1开始) 示例 输入:numbers = [2, 7, 11, 15], target = 9 输出:[1,2] 思路 ...

  4. Linux_LVM管理

    一.Ivm的应用场景及其弊端 1.应用场景: 随着公司的发展,数据增长较快,最初规划的磁盘容量不够用了 2.弊端: 数据不是直接存放在硬盘上,而是在硬盘的.上面又虚拟出来--层逻辑卷存放数据,故而增加 ...

  5. 攻防世界(十一)warmup

    攻防世界系列 :warmup 1.打开题目,一个贱贱的滑稽表情 F12看到注释内容source.php 2.访问source.php <?php highlight_file(__FILE__) ...

  6. IT菜鸟之网线制作

    网线是属于OSI七层模型中的物理层:网络中的数据传输媒介 备注:OSI七层模型后面会记录 网线制作所需要的资源素材: 1.网线 2.水晶头(类型:电话线RJ11,宽带线RJ45) 3.网线钳(非必需) ...

  7. java基础之8种基本数据类型

    简单往往是最重要的,在刚刚学java的时候老师会给我们先讲这8种基本数据类型,今天再来做一个温习,[本文大部分参考了 https://zhuanlan.zhihu.com/p/25439066,在上面 ...

  8. Task类学习教程—组合任务ContinueWith

    Task类学习教程-组合任务.ContinueWith 一.简介 通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务.ContinueWith是Task根据其自身状况,决定后续应该作何操作 ...

  9. 摄像头PVD和CVD薄膜

    摄像头PVD和CVD薄膜 在FDP 的生产中,在制作无机薄膜时,可以采用的方法有两种:PVD 和CVD (将VE 和VS 归于PVD ,而ALD 归于CVD). Physical Vapor Depo ...

  10. ffmpeg architecture(中)

    ffmpeg architecture(中) 艰苦学习FFmpeg libav 您是否不奇怪有时会发出声音和视觉? 由于FFmpeg作为命令行工具非常有用,可以对媒体文件执行基本任务,因此如何在程序中 ...