Halten Sie Git-Repositorys auf verschiedenen Hosts synchron

34

Ich denke darüber nach, ein kleines Projekt zu starten und möchte seine Versionierung mit git machen.

Bitbucket scheint eine gute Option für mich mit ihrem kostenlosen Plan. Ich möchte es als Hauptwerkzeug für die Arbeit mit Git verwenden, da es nette Werkzeuge wie ein Webinterface, einen Mac OS-Client usw. enthält. Um jedoch einen höheren Schutz vor versehentlichen Schäden zu gewährleisten, die durch die Verwendung eines Drittanbieter-Dienstes verursacht werden können, möchte ich git auch auf meinem NAS als zweite Sicherungskopie des Repositorys installieren.

Nun ist meine Frage, ob es möglich ist, ein Repository auf zwei verschiedenen Hosts zu erstellen und diese dann synchron zu halten. Nehmen wir zum Beispiel einmal pro Woche an, ich aktualisiere das Repository auf meinem NAS so, dass es mit dem auf Bitbucket übereinstimmt. Wenn dann etwas mit Bitbucket passiert, habe ich immer noch das vollständige Repository mit der vollständigen Entwicklungshistorie auf meinem lokalen NAS-Speicher.

Und gibt es eine Möglichkeit, ein vorhandenes Repository mit vollem Verlauf in einen anderen Git-Service zu importieren?


Ich denke, das Spiegeln ist das, was ich brauche. Dieser Artikel scheint genau das zu beschreiben, was ich brauche. Und das eine als auch.

Ich glaube, dass es eine vollständige Kopie mit vollem Verlauf erstellt und sogar automatisch neue Versionen in die Repositorys auf beiden Hosts schreibt.

Habe ich recht?

BartoNaz
quelle
Ich benutze xpdev Ich frage mich in Ihrer 2-System-Situation, was der Vorteil von Rusing Git in Ihrem Fall wäre. nur um sicher zu gehen, mache ich von jedem finalen build ein usb backup. Grundsätzlich wird die Versionsverwaltung jedoch mit xpdev durchgeführt, sodass dies keine echte Voraussetzung ist. Übrigens, wenn Sie ein narrensicheres NASS Raid1 besitzen, oder wenn Sie in Betracht ziehen, Ihre eigenen Versionssysteme zu betreiben, gibt es auch einige Freeones
user613326
Ich möchte aber die Vollversion an 2 Stellen zur Verfügung haben. Wenn das Hosting eines Drittanbieters ausfällt oder die Firma, die es betreibt, einfach verschwindet, möchte ich immer noch genau die gleiche Erfahrung mit der gesamten Versionsgeschichte haben ...
BartoNaz
Es bedeutet, dass ich Bitbucket für Komfort und Leistung auf NAS für 99,9% Sicherheit habe.
BartoNaz
Da es unwahrscheinlich ist, dass xp-dev stirbt, können sie Code-Hosting-Pläne, Preise usw. ändern oder sich mit einem anderen Unternehmen zusammenschließen. Aber es ist eine Geldmilchkuh für sie. Und sie sichern auch die wertvollen Daten. Es ist ihre Aufgabe, an Ort und Stelle zu bleiben. Ich benutze es mit 3 Entwicklern, und unser Code existiert auf 5 verschiedenen Rechnern, auf denen es immer eine lokale Quellkopie gibt, die bei xp dev synchronisiert wird. XP dev ist kostenlos, wenn Sie nur wenige Projekte haben.
user613326
1
Natürlich ist es unwahrscheinlich. Aber trotzdem kann man nie 100% sicher sein ...
BartoNaz

Antworten:

19

Ja, das ist genau das Schöne an DVCS wie Git. Sie können eine beliebige Anzahl verschiedener Repos mit demselben Status wie bei Bitbucket oder Github verwenden.

Auch Ihre lokale Kopie (das Repository auf Ihrem Computer) ist normalerweise ein vollständiger Klon des Remote-Repos.

Das einzige, was Sie tun müssen, um mehrere Repos synchron zu halten, ist das Abrufen eines Repos (normalerweise Origin oder Upstream genannt) und das Abrufen der Sicherungskopien.

Wilbert
quelle
11
Leider ist nicht alles so glänzend. Beachten Sie die Warnung vor einer KDE-Beinahe-Katastrophe . Das heißt, stellen Sie sicher , dass die Sicherung funktioniert nicht löschen Dinge (Filialen, Datenbanken usw.) , die auf dem gesicherten Server gelöscht wurden.
Jan Hudec
Ich bin mir immer noch nicht sicher, ob ich es richtig verstehe. Nach meinem Verständnis funktioniert das Drücken und Ziehen mit einer bestimmten Version. Angenommen, ich habe eine aktuelle Version des Codes auf meiner Arbeitsmaschine. Ich habe das Git-Repository auf dem Remote-Host (Bitbucket, Github oder irgendetwas anderes), das den vollständigen Verlauf der Codeentwicklung bis zur neuesten Version, die ich auf dem Arbeitscomputer habe, enthält (sofern sie festgeschrieben wurde). Und ich habe ein Repository auf dem NAS, das leer ist. Kann ich den vollständigen Verlauf des Codes vom Remote-Host auf meinen NAS importieren, sodass ich an zwei Stellen zwei identische Repositorys habe, und wie?
BartoNaz
2
Klonen Sie das Remote-Repository und ziehen Sie dann in regelmäßigen Abständen alle Aktualisierungen (alle Zweige) dorthin. Ein Git-Klon enthält den Verlauf. Es ist nicht wie ein SVN-Checkout, der nur die neueste Version enthält.
Wilbert
11

Hier ist eine getestete Lösung für das Problem: Automatic Sync 2 Remote Git Repositories

Ein einfaches Skript zum Synchronisieren von 2 entfernten Git-Repositories

Ich habe im Web nach einem einfachen Skript gesucht, das synchronisiert werden soll. 2 entfernte Repositories, aber ich konnte ein solches Skript nicht finden, auch wenn viele es zu suchen scheinen! Also habe ich 2 einfache Test-Repositorys erstellt und begonnen, ein solches Skript zu testen und zu erstellen.

Was sollte ein solches Skript tun?

Im Allgemeinen sind die Schritte dazu einfach: 1. Klonen Sie das erste Repository. 1. Fügen Sie das zweite Repository als zusätzliches Remote-Repository hinzu. 1. Holen Sie alles, was sich im zweiten Repository befindet. 1. Schieben Sie das aktualisierte lokale Repository auf das 2 Remote-Repositorys.

Das verbleibende Problem ist - was sind die richtigen Schalter für alle oben genannten Git-Befehle?

Hier ist es also...

2repos-sync.sh Gisp-Skript

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

HINWEIS - Dieses Skript löst keine Konflikte zwischen dem Repository-Inhalt!

yorammi
quelle
Möglicherweise möchten Sie in Ihrer Antwort erwähnen, dass Sie als Erstes ein vorhandenes lokales Verzeichnis mit $ REPO_NAME löschen. Dies scheint wichtig zu sein und kann den Datenverlust von Personen verhindern, die Ihre Lösung einfach kopieren.
Wilbert
Dazu ist LibGit2 nützlich.
RubberDuck
0

Ich verwende ein privates GitLab, um alle meine Repositories zu speichern, so dass ich nur einen Ursprung habe, von dem ich während der täglichen Entwicklung schiebe und ziehe.

Bei Open Source-Projekten ist GitHub jedoch eine viel lebendigere Community. Wenn ich Community-Beiträge für meine Projekte annehmen möchte, benutze ich das Web-Hook-System von GitLab, um einen von mir ausgeführten Server zu pingen, der dann meine öffentlichen Repos auf GitHub aktualisiert.

Auf diese Weise kann ich GitHub als eine andere Remote-Instanz behandeln, die ich verwenden kann, wenn jemand einen Beitrag leistet - und dann füge ich --no-ff lokal zusammen. Außerdem wird festgelegt, wie alle meine primären und öffentlichen Repositorys die Änderungen verteilen.

diffalot
quelle