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 privatesetzen wollt, dann kommentiert einfach diese Zeile aus mit #
gh repo edit "$($org)/$($repoData.name)" --visibility privateEt voila, Euer GitHub ist aufgeräumt:

Warum Repos archivieren?
Über die Jahre sammeln sich bei den meisten Entwicklern hunderte von Repositories an – Testprojekte, Tutorials, Forks, die man nie gebraucht hat. Das macht nicht nur die Übersicht schwieriger, sondern kann auch zu Sicherheitsproblemen führen: Veraltete Repos mit bekannten Sicherheitslücken in den Abhängigkeiten werden von Dependabot trotzdem noch gemeldet, was zu einer Flut von Benachrichtigungen führt.
Archivierte Repos sind weiterhin öffentlich sichtbar und können geklont werden, aber es können keine neuen Issues, Pull Requests oder Commits erstellt werden. Das signalisiert auch anderen Entwicklern klar, dass das Projekt nicht mehr aktiv gepflegt wird.
Die Automatisierung erweitern
Das PowerShell-Skript lässt sich leicht erweitern. Du könntest beispielsweise eine Whitelist einbauen, die bestimmte Repos von der Archivierung ausschließt, oder eine Benachrichtigung per E-Mail oder Discord senden, wenn Repos archiviert werden. Auch eine Kombination mit GitHub Actions ist möglich, um das Aufräumen regelmäßig automatisiert durchzuführen.
Weiterführende Artikel
Wenn dir dieser Artikel gefallen hat, könnten dich auch diese Beiträge interessieren:
Mehr Artikel entdecken
Mein Weg zum 3D-Druck
Wie ich zum 3D-Druck gekommen bin und warum ich welchen Drucker und Software nutze, zeige ich dir hier 💡
n8n Unleashed: Ultimative Workflow-Automatisierung
Langweilige und wiederkehrende Prozesse schnell und einfach automatisieren 👇
Spoolman: Deine Filament-Rollenverwaltung
Du verlierst den Überblick über deine Filamente? Ich habe eine Lösung dafür! 🛵