#date: 20250411
#ref: https://blog.darkthread.net/blog/code-list-from-git-diff/
param (
[Parameter(Mandatory=$True)]
[string] $diffFile,
[Parameter(Mandatory=$True)]
[string] $srcFolder,
[Parameter(Mandatory=$True)]
[string] $targetFolder,
[Parameter(Mandatory=$True)]
[string] $resultFolder
)
#讀取 git diff --name-status 結果
$files = Get-Content $diffFile -Encoding UTF8
#清單陣列
$list = @()
foreach ($file in $files)
{
#使用 .NET Regex 解析取出狀態及路徑
$match = [System.Text.RegularExpressions.Regex]::Match($file, "^(?[ACDMRTUXB])\s+(?
.+)$") if (-not $match.Success) { continue } $relFilePath = $match.Groups["p"].Value.Replace("/", "\") $status = $match.Groups["s"].Value.Replace("A", "新增").Replace("M", "修改").Replace("D", "刪除") #產生程式碼清單 $object = New-Object PSObject -Property @{ Path = $relFilePath Desc = "" Status = $status Remark = "" } $list += $object #複製檔案 if ($status -ne "刪除") { #小技巧:New-Item 可一次產生所需的目錄階層,取代逐層檢查目錄是否存在及建立 New-Item -ItemType File -Path "$targetFolder\$relFilePath" -Force | Out-Null Copy-Item "$srcFolder\$relFilePath" "$targetFolder\$relFilePath" -Force | Out-Null } } #產生CSV $list | Select @{N='路徑';E={$_.Path}},@{N='說明';E={$_.Desc}},@{N='狀態';E={$_.Status}},@{N='備註';E={$_.Remark}} | Export-Csv "$resultFolder\CodeList.csv" -Encoding UTF8 -NoTypeInformation