我有一大堆可怕的git存储库,包括我自己和几个客户端,分散在一组目录中(我工作的其他几个开发人员也有同样的问题)。我想编写一个我和他们可以运行的脚本,它将遍历一组目录并告诉我们哪些目录有未提交的更改。可悲的是,我在那里看到的大多数例子都是使用bash做的,这可能并不适用于所有机器(我们是一家门店)。有没有办法在PowerShell或普通的旧批处理文件中执行此操作?
答案 0 :(得分:3)
这是一个快速的'脏的Powershell脚本:
$fn = $env:temp\gitStat.txt
$dir = dir $pwd | ?{$_.PSISContainer}
$start = $pwd
foreach ($d in $dir) {
cd $d
if(Test-Path $fn) {
Remove-Item $fn
}
& git status | Out-File $fn
$ss = Select-String -Path $fn -SimpleMatch "Changes not staged for commit"
if($ss -ne $null) {
$msg = [string]::Format("{0} has modified files", $pwd)
Write-Host $msg
}
$ss = Select-String -Path $fn -SimpleMatch "Untracked files"
if($ss -ne $null) {
$msg = [string]::Format("{0} has untracked files", $pwd)
Write-Host $msg
}
$ss = Select-String -Path $fn -SimpleMatch "Changes to be committed"
if($ss -ne $null) {
$msg = [string]::Format("{0} has staged files", $pwd)
Write-Host $msg
}
cd $start
}
这是我在JPSoft的tcc.exe命令shell下运行的批处理文件。它可能适用于cmd.exe或powershell。
@echo off
: Because this needs %_cwd, it must be used with TCC.exe
@if "%_cmdproc"=="TCC" (goto OK)
:testTCCLE
@if NOT "%_cmdproc"=="TCCLE" (goto wrongShell)
:OK
global /i /q /s4 (if exist .git\ echo === %_cwd === && git status)
goto xit
:wrongShell
echo TCC/TCCLE required.
:xit
这显示了每个git目录的状态;我一直在研究一个只显示未提交更改的dirs的版本,但还没有完成它。另一个改进是显示他们追踪的任何回购的前方或后方的目标。 HTH。