GitHub Repos automatisiert archivieren
GitHub-Repos schnell und einfach archivieren? Ich zeig dir wie!
Vor Kurzem hatte ich das Gefühl, dass meine GitHub-Repos langsam etwas zu viel werden. Viele davon habe ich seit Jahren nicht mehr angefasst, geschweige den tatsächlich richtig genutzt. Daher wollte ich alle meine Repos einmal aufräumen und alles, was älter ist als x Monate/Jahre, archivieren. Ich hatte aber keine Lust gefühlt 500 Repos manuell durchzugehen.
Das konnte recht einfach mit der GitHub CLI erledigt werden. Dazu muss die GitHub CLI installiert werden:
Das Skript
Für mich als Windows-Nutzer lag es nahe, das Skript mit PowerShell "mal" eben aufzusetzen. Prinzipiell benutzt das Skript nur die GitHub CLI und holt sich aus dem Account (Ihr müsst natürlich eingeloggt sein) alle Repos und archiviert diese bzw. werden diese wahlweise noch in private
geschaltet.
$org = "Disane87"
$limit = 400
$retentionDays = 182
(gh repo list $org -L $limit --json name,pushedAt) | ConvertFrom-Json | ForEach-Object {
$repoData = $_;
Write-Host "--------------------------------------------------"
Write-Host "RepoName $($repoData.name)"
$publishedDate = [datetime]::ParseExact($repoData.pushedAt, "M/d/yyyy H:mm:ss", $null)
$timeDiff = New-TimeSpan -Start $publishedDate -End (Get-Date)
if ($timeDiff.TotalDays -gt $retentionDays) {
Write-Host "$($repoData.name) is older than $($retentionDays) days $($timeDiff.TotalDays)"
gh repo edit "$($org)/$($repoData.name)" --visibility private
gh repo archive $repoData.name -y
}
}
Prinzipiell muss im Script nur euer GitHub-Username eingetragen werden und ggf. die Retention verändert werden. Im Standard ist diese 182 Tage.
Wenn Ihr Eure Repos nicht auf private
setzen wollt, dann kommentiert einfach diese Zeile aus mit #
gh repo edit "$($org)/$($repoData.name)" --visibility private
Et voila, Euer GitHub ist aufgeräumt: