前言
小鱼多太设备需要同步代码,并且不在同一网络下,突发奇想,是不是可以通过git 实现代码同步。
那么问题来了,如何保证每天都执行 git add
、git commit
和 git push
命令?
作为开发者,能偷懒的事,绝对不亲自做。于是,这个脚本就诞生了。
PowerShell 介绍
PowerShell 是由微软开发的一个命令行环境和脚本语言,也是一种跨平台的任务自动化解决方案,用于系统管理和配置管理,由命令行 shell、脚本语言和配置管理框架组成。
PowerShell 可以在 Windows、Linux 和 macOS 上运行。它首次发布于 2006 年,是微软 Windows 操作系统的一部分,并可以用于自动化系统管理任务。
PowerShell 是在.NET公共语言运行时 (CLR) 上构建的,作为一种面向对象的脚本语言, 通常用于自动执行系统管理。 它还用于经常在 CI/CD 环境中生成、测试和部署解决方案。其所有输入和输出都是 .NET 对象。无需分析文本输出即可从输出中提取信息。
PowerShell 脚本语言包含以下功能:
- 可通过函数、类、脚本和模块进行扩展
- 便于输出的可扩展格式系统
- 用于创建动态类型的可扩展类型系统
- 对常用数据格式(例如 CSV、JSON 和 XML)的内置支持
PowerShell 常用于自动化任务,如系统配置、软件部署、环境设置等。它的强大功能和灵活性使其成为系统管理员和开发人员的重要工具。
PowerShell 下载
最新版下载地址: Release v7.4.3
实现过程
PowerShell 代码
先给出代码,对powershell 熟悉的阅读到此就可以了。
代码需要放置在项目的根路径下,会自动获取到脚本所在的路径,并对该路径下的代码进行 git add
、git commit
和 git push
,提交完后会保留执行日志。方便后续查看。
或者,你可以参考代码进行修改,包括项目路径、commit 信息等等。
# 文件名:autoGitPush.ps1
Function gitPush {
# 将脚本放置在项目根路径
if ($PSVersionTable.PSVersion.Major -ge 3) {
# PowerShell 3.0 或更高版本
$ScriptPath = $PSCommandPath
} else {
# PowerShell 2.0 或更低版本
$MyInvocation = (Get-Variable MyInvocation).Value
$ScriptPath = $MyInvocation.MyCommand.Definition
$ScriptDir = Split-Path -Parent $ScriptPath
}
$ScriptDir = Split-Path -Path $ScriptPath -Parent
Write-Output $ScriptDir
Set-Location $ScriptDir # 切换到项目路径
$now = Get-Date # 获取时间日期对象
$msg = "==> " + $now.ToString('yyyy-MM-dd HH:mm:ss') + " commit <=="# 提交的消息
# 将提交信息输出到日志文件gitpush.log
$msg | Out-File -FilePath .\gitpush.log -Append -Encoding utf8
Write-Output $msg
# 将代码的相关信息输出到日志文件gitpush.log
git status >> .\gitpush.log
git add . >> .\gitpush.log
git commit -m $msg >> .\gitpush.log
git push origin main >> .\gitpush.log
}
gitPush # 运行函数
调试powershell
VScode 插件——PowerShell
小鱼使用VScode 和PowerShell插件来完成脚本的调试的。插件如下图所示:
运行脚本
本文创建的脚本文件名为 autoGitPush.ps1
,在VScode 终端下通过以下指令就可以执行本脚本。
.\autoGitPush.ps1
自动化配置
Win + R
打开运行窗口,输入taskschd.msc然后回车。
打开任务计划窗口,选择创建任务,并参考下图进行配置。
接下来配置触发器,小鱼这里设置了两条,电脑空闲状态下,以及每天定时执行。
最后配置一下操作,点击新建,找到power 执行程序,一般是在 "C:\Program Files\PowerShell\7\pwsh.exe"
。
别忘了再添加参数,-File [ps1 path]\autoGitPush.ps1
,autoGitPush.ps1
脚本文件所在的路径。
到这里就已经配置完了。
最后别忘了测试下是否配置成功了。