2014-02-06 118 views
1

我有一堆巨大的,可怕的一堆git存儲庫,包括我自己的和幾個客戶端,散佈在一組目錄中(我工作的其他幾個開發人員都擁有同樣的問題)。我想編寫一個腳本,我和他們可以運行它將遍歷一組目錄並告訴我們哪些腳本具有未提交的更改。可悲的是,我在那裏看到的大多數示例都是使用bash來實現的,這些bash可能不適用於所有機器(我們是windows商店)。有沒有辦法在PowerShell或普通的舊批處理文件中做到這一點?如何檢查窗口中未提交的git存儲庫

回答

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。

相關問題