feat(git-control): add branch compare (main/uat/prod), org/single repo support

Made-with: Cursor
This commit is contained in:
2026-02-27 15:43:46 +08:00
parent 2768d58aa3
commit f50d4ab4a3
4 changed files with 227 additions and 3 deletions
@@ -0,0 +1,38 @@
# Compare branches across all repos in an org - detect unmerged commits
# -CompareSet full: main vs uat, main vs prod, uat vs prod for each repo
param(
[string]$Org = "G3SF",
[string]$Repo,
[string]$BaseBranch = "main",
[string]$HeadBranch = "prod",
[ValidateSet("single", "full")]
[string]$CompareSet = "full",
[string]$WorkspaceRoot = "d:\AFE Git\G3SF\G3FO\server",
[switch]$UseApi,
[string]$SinceTag,
[string]$SinceDate
)
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$CompareScript = Join-Path $ScriptDir "branch_compare.ps1"
$ListScript = Join-Path $ScriptDir "list_orgs_repos.ps1"
$repos = if ($Repo) { @($Repo) } else { @(& $ListScript -Action list-repos -Org $Org) }
$hasLocal = Test-Path $WorkspaceRoot
foreach ($r in $repos) {
if (-not $r) { continue }
$path = Join-Path $WorkspaceRoot $r
Write-Host "########## $Org/$r ##########" -ForegroundColor Magenta
if ($UseApi -or (-not $hasLocal) -or (-not (Test-Path $path))) {
$params = @{ Owner = $Org; Repo = $r; BaseBranch = $BaseBranch; HeadBranch = $HeadBranch; CompareSet = $CompareSet }
& $CompareScript @params
} else {
$params = @{ RepoPath = $path; BaseBranch = $BaseBranch; HeadBranch = $HeadBranch; CompareSet = $CompareSet }
if ($SinceTag) { $params.SinceTag = $SinceTag }
if ($SinceDate) { $params.SinceDate = $SinceDate }
& $CompareScript @params
}
Write-Host ""
}