{"id":7332,"date":"2026-10-03T13:25:50","date_gmt":"2026-10-03T11:25:50","guid":{"rendered":"https:\/\/ekiwi.de\/?p=7332"},"modified":"2026-10-03T13:25:50","modified_gmt":"2026-10-03T11:25:50","slug":"github-backup-so-sichere-ich-meine-repositories-lokal","status":"publish","type":"post","link":"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/","title":{"rendered":"GitHub-Backup: So sichere ich meine Repositories lokal"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Inhalt<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/#Ein_normales_Backup_reicht_voellig_aus\" >Ein normales Backup reicht v\u00f6llig aus<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/#Alle_Repositories_auf_einmal_sichern\" >Alle Repositories auf einmal sichern<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/#SSH_statt_Passwort\" >SSH statt Passwort<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/#Nicht_jedes_Mal_alles_neu_herunterladen\" >Nicht jedes Mal alles neu herunterladen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/#Und_wenn_GitHub_wirklich_einmal_weg_ist\" >Und wenn GitHub wirklich einmal weg ist?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ekiwi.de\/index.php\/7332\/github-backup-so-sichere-ich-meine-repositories-lokal\/#Fazit\" >Fazit<\/a><\/li><\/ul><\/nav><\/div>\n<p>GitHub-Backup: So sichere ich meine Repositories lokal<\/p>\n<p>GitHub ist bequem. Der Code ist zentral gespeichert, man kommt von \u00fcberall dran und mit Git funktioniert das Ganze ohnehin ziemlich angenehm. Trotzdem bleibt bei mir ein Gedanke h\u00e4ngen: Was ist eigentlich, wenn ich irgendwann keinen Zugriff mehr auf meinen Account habe? <\/p>\n<p><!--more--><\/p>\n<p>Klar, im Normalfall passiert das nicht. Der Account l\u00e4uft, SSH funktioniert und die Repositories sind da. Aber \u00fcber die Jahre sammelt sich einiges an. Alte Projekte, aktuelle Projekte, private Repositories, kleine Tools, Testprojekte und Software, an der man teilweise sehr lange gearbeitet hat.<\/p>\n<p>Da m\u00f6chte ich ehrlich gesagt nicht darauf angewiesen sein, dass ich auch in zehn Jahren noch problemlos an meinen GitHub-Account komme.<\/p>\n<p>Mir geht es dabei gar nicht darum, GitHub komplett zu sichern. Issues, Pull Requests, Actions oder sonstige Funktionen sind f\u00fcr mich zweitrangig. Wichtig ist mir vor allem der Code.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ein_normales_Backup_reicht_voellig_aus\"><\/span>Ein normales Backup reicht v\u00f6llig aus<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Zum Gl\u00fcck braucht man daf\u00fcr keine spezielle Backup-Software. Git kann das selbst.<\/p>\n<p>Statt ein Repository ganz normal zu klonen, kann man es als Mirror sichern:<\/p>\n<pre>git clone --mirror git@github.com:USERNAME\/REPOSITORY.git<\/pre>\n<p>Dabei entsteht beispielsweise ein Verzeichnis wie:<\/p>\n<pre>MeinProjekt.git<\/pre>\n<p>Darin befindet sich kein ausgecheckter Projektordner, sondern das eigentliche Git-Repository.<\/p>\n<p>F\u00fcr ein Backup ist das ziemlich praktisch. Im Fall der F\u00e4lle kann man daraus sp\u00e4ter wieder ein normales Repository machen oder den kompletten Bestand auf einen anderen Git-Server \u00fcbertragen.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Alle_Repositories_auf_einmal_sichern\"><\/span>Alle Repositories auf einmal sichern<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wenn man nur zwei oder drei Projekte hat, kann man die nat\u00fcrlich einzeln sichern. Mit der Zeit werden es aber schnell deutlich mehr.<\/p>\n<p>Mit der GitHub CLI kann man sich alle Repositories des eigenen Accounts anzeigen lassen:<\/p>\n<pre>gh repo list USERNAME --limit 1000<\/pre>\n<p>Noch praktischer ist die Ausgabe nur mit den Repository-Namen:<\/p>\n<pre>gh repo list USERNAME --limit 1000 --json nameWithOwner -q '.[].nameWithOwner'<\/pre>\n<p>Damit l\u00e4sst sich das Backup direkt automatisieren:<\/p>\n<pre>mkdir -p ~\/git-backup\r\ncd ~\/git-backup\r\n\r\ngh repo list USERNAME --limit 1000 --json nameWithOwner -q '.[].nameWithOwner' |\r\nwhile read repo; do\r\n    echo \"Backup: $repo\"\r\n    git clone --mirror \"git@github.com:$repo.git\"\r\ndone<\/pre>\n<p>Damit werden alle Repositories nacheinander lokal gespiegelt.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"SSH_statt_Passwort\"><\/span>SSH statt Passwort<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ich verwende daf\u00fcr SSH. Das ist ohnehin praktisch, wenn man Git regelm\u00e4\u00dfig benutzt. Ob der Zugriff funktioniert, l\u00e4sst sich schnell testen:<\/p>\n<pre>ssh -T git@github.com<\/pre>\n<p>Wenn der SSH-Key korrekt eingerichtet ist, kann Git anschlie\u00dfend auch private Repositories sichern.<\/p>\n<p>F\u00fcr die GitHub CLI muss man zus\u00e4tzlich angemeldet sein:<\/p>\n<pre>gh auth login<\/pre>\n<p>Dann landen auch die privaten Repositories in der Liste.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Nicht_jedes_Mal_alles_neu_herunterladen\"><\/span>Nicht jedes Mal alles neu herunterladen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nat\u00fcrlich soll das Backup nicht jedes Mal wieder bei null anfangen.<\/p>\n<p>Ist ein Repository bereits vorhanden, reicht ein Update:<\/p>\n<pre>git -C \"MeinProjekt.git\" remote update --prune<\/pre>\n<p>Damit werden neue Commits, Branches und Tags nachgeladen. Das l\u00e4sst sich leicht in ein kleines Skript packen, das pr\u00fcft, ob ein Repository schon vorhanden ist. Neue Projekte werden geklont, bestehende nur aktualisiert. Damit kann man das Backup regelm\u00e4\u00dfig laufen lassen, ohne jedes Mal alles neu herunterzuladen.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Und_wenn_GitHub_wirklich_einmal_weg_ist\"><\/span>Und wenn GitHub wirklich einmal weg ist?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dann wird es interessant. Die gesicherten Mirror-Repositories sind keine speziellen GitHub-Dateien.<\/p>\n<p>Es sind ganz normale Git-Repositories. Ich k\u00f6nnte sie also sp\u00e4ter auf einen eigenen Server kopieren:<\/p>\n<pre>\/srv\/git\/\r\n\u251c\u2500\u2500 MeinProjekt.git\r\n\u251c\u2500\u2500 Projekt2.git\r\n\u2514\u2500\u2500 Projekt3.git<\/pre>\n<p>Und anschlie\u00dfend direkt per SSH darauf zugreifen:<\/p>\n<pre>git clone user@meinserver:\/srv\/git\/MeinProjekt.git<\/pre>\n<p>Mehr braucht es im einfachsten Fall gar nicht. Git und SSH reichen. Wer sp\u00e4ter noch eine Weboberfl\u00e4che m\u00f6chte, kann nat\u00fcrlich Gitea, Forgejo oder etwas Vergleichbares verwenden.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Fazit<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Auch wenn ich nicht davon ausgehe, dass es mit GitHub irgendwann Probleme bereiten wird, mit einem Backup schl\u00e4ft es sich immer besser.<\/p>","protected":false},"excerpt":{"rendered":"<p>GitHub-Backup: So sichere ich meine Repositories lokal GitHub ist bequem. Der Code ist zentral gespeichert, man kommt von \u00fcberall dran<\/p>\n","protected":false},"author":1,"featured_media":6960,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[13],"tags":[87,1626,925],"class_list":["post-7332","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programmierung","tag-backup","tag-git","tag-github"],"_links":{"self":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/posts\/7332","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/comments?post=7332"}],"version-history":[{"count":0,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/posts\/7332\/revisions"}],"wp:attachment":[{"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/media?parent=7332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/categories?post=7332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ekiwi.de\/index.php\/wp-json\/wp\/v2\/tags?post=7332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}