PowerShell脚本检测Git状态并提交指定类型文件的问题求助
问题解决与完整脚本实现
1. 解决"fatal: not a git repository"报错
这个报错的核心原因是脚本运行时的当前工作目录并非Git仓库根目录,也不在仓库的子目录下。解决方式有两种:
- 手动切换到Git仓库目录后再执行脚本;
- 在脚本中指定Git仓库的绝对路径,强制Git在目标仓库环境下执行命令(推荐)。
2. 满足需求的完整PowerShell脚本
以下脚本会实现检测指定类型文件的新增/修改、自动添加至Git并提交的功能:
# 配置参数:替换为你的实际路径和需要监控的文件类型 $repoPath = "C:\Your\Git\Repo\Root\Path" # Git仓库绝对路径 $targetExtensions = @(".txt", ".md") # 可添加更多类型,比如.log/.csv # 切换到Git仓库目录,路径无效时直接终止脚本 Set-Location -Path $repoPath -ErrorAction Stop # 获取所有变更文件的精简状态输出(--porcelain格式便于解析) $allChanged = git status --porcelain # 筛选出新增/修改的目标类型文件(状态码M=修改,A=新增) $targetFiles = $allChanged | Where-Object { $statusCode = $_.Substring(0,2).Trim() $filePath = $_.Substring(3).Trim() ($statusCode -in 'M', 'A') -and ($targetExtensions -contains [System.IO.Path]::GetExtension($filePath)) } if ($targetFiles.Count -gt 0) { Write-Output "找到 $($targetFiles.Count) 个符合条件的变更文件:" $targetFiles | ForEach-Object { Write-Output " $_" } # 将目标文件添加到Git暂存区 $targetFiles | ForEach-Object { $file = $_.Substring(3).Trim() git add "$file" } # 执行提交,自动生成带时间戳的提交信息 git commit -m "Auto-commit: Update target files ($(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'))" Write-Output "自动提交完成" } else { Write-Output "未检测到符合条件的变更文件" }
3. 关键细节说明
- 仓库路径配置:必须将
$repoPath替换为你的Git仓库绝对路径,彻底解决工作目录不匹配的问题; - 文件类型扩展:修改
$targetExtensions数组即可添加其他需要监控的文件类型; - 状态码筛选:仅处理
git status中标记为M(已修改)和A(新增)的文件,忽略删除、重命名等其他变更类型; - 错误防护:
Set-Location的-ErrorAction Stop会在路径无效时直接终止脚本,避免后续Git命令抛出无意义的报错。
内容的提问来源于stack exchange,提问作者Sergio Ramos
相关产品推荐
相关产品推荐

