Ich verwende git für ein relativ kleines Projekt und finde, dass das Zippen des Inhalts des .git-Verzeichnisses eine gute Möglichkeit ist, das Projekt zu sichern. Aber das ist irgendwie komisch, denn wenn ich wiederherstelle, muss ich als erstes tun git reset --hard
.
Gibt es Probleme beim Sichern eines Git-Repos auf diese Weise? Gibt es auch einen besseren Weg, dies zu tun (z. B. ein tragbares Git-Format oder ähnliches?)?
git bundle
Antworten:
Ich habe angefangen, ein bisschen in Yars Skript zu hacken, und das Ergebnis ist auf Github, einschließlich Manpages und Installationsskript:
https://github.com/najamelan/git-backup
Installation :
Begrüßen Sie alle Vorschläge und ziehen Sie Anfrage auf Github.
quelle
sudo install.sh
und konfigurieren es dann (es verwendet das Git-Konfigurationssystem), um das Zielverzeichnis festzulegen (siehe die Readme-Datei auf github). Als nächstes laufen Siegit backup
in Ihrem Repository. Als Nebenbemerkung war dies ein Experiment mit dem Git-Bundle und eine Antwort auf diese Frage, aber das Git-Bundle erstellt niemals eine absolut exakte Kopie (z. B. wenn ich mich gut erinnere, insbesondere in Bezug auf Git-Fernbedienungen), also verwende ich persönlich tatsächlich Teer zum Sichern. Git-Verzeichnisse.Der andere offizielle Weg wäre die Verwendung eines Git-Bundles
Dadurch wird eine Datei erstellt, die Ihr zweites Repo unterstützt
git fetch
undgit pull
aktualisiert.Nützlich für inkrementelle Sicherung und Wiederherstellung.
Wenn Sie jedoch alles sichern müssen (da Sie noch kein zweites Repo mit älteren Inhalten haben), ist die Sicherung, wie in meiner anderen Antwort erwähnt, nach Kent Fredrics Kommentar etwas aufwändiger :
(Es ist eine atomare Operation , im Gegensatz dazu, ein Archiv aus dem
.git
Ordner zu erstellen , wie von fantastabolous kommentiert. )Warnung: Ich würde Pat Notz ' Lösung , die das Repo klont , nicht empfehlen .
Das Sichern vieler Dateien ist immer schwieriger als das Sichern oder Aktualisieren ... nur eine.
Wenn Sie sich den Bearbeitungsverlauf der OP Yar- Antwort ansehen, werden Sie feststellen, dass Yar zunächst a
clone --mirror
, ... mit der Bearbeitung verwendet hat:Die aktuelle Lösung von Yar verwendet
git bundle
.Ich ruhe meinen Fall aus.
quelle
git bundle
. Mit einer globalen Zip-Datei des gesamten lokalen Repos ist dies nicht möglich.Die Art und Weise, wie ich dies mache, besteht darin, ein Remote-Repository (auf einem separaten Laufwerk, einem USB-Stick, einem Backup-Server oder sogar einem Github) zu erstellen und
push --mirror
dieses Remote-Repo dann genau so aussehen zu lassen, wie mein lokales (außer dass die Remote ein nacktes Repository ist) Repository).Dadurch werden alle Verweise (Zweige und Tags) einschließlich nicht schneller Vorlaufaktualisierungen übertragen. Ich verwende dies zum Erstellen von Backups meines lokalen Repositorys.
Die Manpage beschreibt es so:
Ich habe einen Alias für den Push erstellt:
Dann
git bak
starte ich einfach, wann immer ich ein Backup machen möchte.quelle
--mirror
für die Objekte, die es erhält, keine Überprüfung durchgeführt wird. Sie sollten wahrscheinlichgit fsck
irgendwann laufen , um Korruption zu verhindern.[Lassen Sie dies hier nur zu meiner eigenen Referenz.]
Mein Bundle-Skript namens
git-backup
sieht so ausManchmal benutze ich
git backup
und manchmal benutze ich,git backup different-name
was mir die meisten Möglichkeiten gibt, die ich brauche.quelle
--global
Option nicht verwendet haben, wird dieser Alias nur in Ihrem Projekt angezeigt (er ist in Ihrer.git/config
Datei definiert) - wahrscheinlich möchten Sie das. Vielen Dank für die detailliertere und schön formatierte Antwort.Beide Antworten auf diese Fragen sind richtig, aber mir fehlte immer noch eine vollständige, kurze Lösung zum Sichern eines Github-Repositorys in einer lokalen Datei. Das Wesentliche finden Sie hier. Sie können sich gerne an Ihre Bedürfnisse anpassen.
backup.sh:
restore.sh:
quelle
Sie können das Git-Repo mit Git-Copy sichern . git-copy hat ein neues Projekt als reines Repo gespeichert, was minimale Speicherkosten bedeutet.
Dann können Sie Ihr Projekt mit wiederherstellen
git clone
quelle
Habe den einfachen offiziellen Weg gefunden, nachdem du durch die Wände des Textes oben gewatet bist, der dich denken lässt, dass es keinen gibt.
Erstellen Sie ein komplettes Bundle mit:
Stellen Sie es wieder her mit:
Diese Operation ist atomare AFAIK. Überprüfen Sie die offiziellen Dokumente auf die wichtigsten Details.
In Bezug auf "zip": Git-Bundles sind komprimiert und im Vergleich zur Größe des .git-Ordners überraschend klein.
quelle
kam zu dieser Frage über Google.
Hier ist, was ich auf einfachste Weise getan habe.
Erstellen Sie dann einen neuen Git-Zweig aus diesem Zweig
Kommen Sie zurück zum ursprünglichen Zweig und fahren Sie fort:
Angenommen, Sie haben es vermasselt und müssen etwas aus dem Sicherungszweig wiederherstellen:
Das Beste daran, wenn etwas schief geht, können Sie einfach den Quellzweig löschen und zum Sicherungszweig zurückkehren !!
quelle