Ein Gerrit-Projekt in eine andere Instanz von Gerrit migrieren

8

Ich habe MainGerritServer , die viele Projekte hostet.
Außerdem habe ich RogueGerritServer , die auch viele Projekte hostet.

Ich suche nach einer Möglichkeit, ein ProjectA von RogueGerritServer nach MainGerritServer zu verschieben, während sowohl der Git-Commit-Verlauf als auch der Gerrit-Review-Verlauf erhalten bleiben.

Ich möchte zum Beispiel den Gerrit-Verlauf des Android-Projekts auf meinen eigenen Gerrit-Server importieren, sodass ich, wenn ich an einer gegabelten Version von Android arbeite, den Gerrit-Verlauf auf meinem lokalen Server nachschlagen kann. Was ist der beste Weg, dies zu tun?

Wenn es sich um eine einfache Installation von Git handelt, klicke ich einfach ProjectA auf meinen Computer und drücke dann auf MainGerritServer . Funktioniert ein Gerrit-basiertes Projekt auf die gleiche Weise?

Ich mache mir Sorgen, weil die Gerrit-Installation eine Datenbank im Hintergrund verwendet, und ich bin mir nicht sicher, ob ich auch die Informationen in der Datenbank migrieren muss. Ich habe viele Threads über einen Datenbank-Dump gesehen und ihn auf einen brandneuen Server verschoben. Ich versuche jedoch, nur ein Projekt zu verschieben, so dass die Verwendung eines DB-Dumps nicht angemessen erscheint. Die nächste Antwort, die ich gesehen habe, war das was immer noch nicht genau das ist, wonach ich suche.

Ich würde mich über jede Hilfe freuen, besonders wenn Sie mir zeigen könnten, ob ich falsch verstehe, wie ich das angehen soll.

Danke

    
Calvin 25.07.2013, 06:21
quelle

4 Antworten

9

Ich habe in letzter Zeit eine Menge Git Projekte bewegt und obwohl ich hauptsächlich von Gerrit weggezogen bin (aufgrund der Abteilung Fiat, Gerrit ist eine gute Wahl IMO) sollte dies das gleiche funktionieren und ist relativ einfach. Das Verschieben der Gerrit-Geschichte wird jedoch schwieriger.

So verschieben Sie ein Repo:

  1. Klonen Sie das Projekt von der aktuellen Quelle.
  2. Erstellen Sie das neue gerrit-Projekt.
  3. Fügen Sie in Ihrem lokalen Klon des zu verschiebenden Projekts den neuen Projektspeicherort als neuen Remote hinzu:

    Git Remote hinzufügen NewGerrit ssh: // NewGerritServer: 29418 / NewProject

  4. drücken Sie auf die neue Fernbedienung. Um die komplette Geschichte zu pushen, mach folgendes:

    Git schieben --all NewGerrit

Sie können auch festlegen, dass der neue Repo automatisch mit einem -u-Flag:

verfolgt wird %Vor%

Die Migration der Gerrit-Datenbank ist eine viel größere Aufgabe und ehrlich gesagt würde ich vorschlagen, dass Sie einfach darauf verzichten, wenn es nicht absolut notwendig ist. Sie können sich eine Vorstellung davon machen, was passiert, wenn Sie direkt auf die Datenbank zugreifen, indem Sie Gerrit's eigene (schreckliche) Abfragesprache GSQL verwenden. Es ist mysql sehr ähnlich, außer temperamentvoll und ohne viele Funktionen.

%Vor%

Dies gibt Ihnen eine GSQL-Eingabeaufforderung. Versuchen Sie Folgendes:

%Vor%

Die Caps, zumindest in der Version von Gerrit, auf die ich Zugriff habe, sind wichtig. (Meine ist zugegebenermaßen veraltet.) Dies wird Ihnen ungefähr 29 Tabellen zeigen und Ihre Projekthistorie ist überall verteilt.

Nach diesem Beitrag von Shawn Pearce (Gerrit-Projektleiter) würden Sie brauchen Um die Datenbank auf einen neuen Datenbankserver zu kopieren, entfernen Sie manuell alle anderen Projekte mit SQL. Sie könnten dann die verbleibenden Daten ausgeben und sie auf den anderen Gerrit-Server importieren. NOTE THE CAVEAT : Es könnte zu einer Kollision von change_id-Werten kommen. Er schlägt jedoch eine Arbeit dafür vor:

  

Sie können die maximale change_id des eingehenden Satzes herausfinden, gehen   Stoßen Sie den change_id_seq des Zielservers manuell an, um ihn zu reservieren   ausreichend ID-Platz, dann stoßen Sie alle alten change_ids auf irgendeine Basis   Wert, so dass sie in einem einzigartigen Raum im Ziel sind ... und schließlich   lade die Zeilen zum Ziel.

So kann es gemacht werden. Es ist ein Schmerz in den Hintervierteln.

    
Ilion 25.07.2013, 06:53
quelle
4

Es gibt jetzt auch ein Importer-Plugin , mit dem Sie ein Git-Repository und alle Überprüfungen von einem Server auf einen anderen migrieren können Ein weiterer. Es funktioniert mit Gerrit Version 2.11 und später.

Weitere Dokumentation:

Das Import-Plugin kann vom (inoffiziellen) CI-Server heruntergeladen werden: Master Version , stable-2.12-Version , stable-2.11 Version.

    
David Pursehouse 26.08.2015 07:53
quelle
0

Das Import-Plugin, das in der Antwort von David Purepehouse eingeführt wurde, scheint der richtige Weg zu sein. Da ich jedoch Schwierigkeiten hatte, die Binärdatei zu erhalten ( scheint es nicht herunterladbar zu sein, muss man sie selbst erstellen gibt es Download-Links , aber ich war mir ihrer zum Zeitpunkt des Schreibens nicht bewusst) und nutze es, dachte, ich hätte meine Erfahrungen dazu hinzugefügt.

  1. Downloade, kompiliere und installiere Buck . Buck ist ein Build-System von Facebook erstellt. Es braucht Linux / Unix-System, wird nicht auf Windows funktionieren.

Schritte:

%Vor%

(siehe Installationsanweisungen )

  1. Downloaden und kompilieren Sie Importeur

Schritte:

%Vor%

Binärdatei ist buck-out/gen/importer.jar .

(siehe Build-Anweisungen )

  1. Kopieren Sie die generierte .jar in Ihre $ gerrit_site / plugins (erstellen Sie das Verzeichnis, falls es nicht existiert) oder, falls Sie es remote tun müssen, tun Sie es %Code%. Letzteres benötigt ssh -i /path/to/your/ssh/key -p 29418 youraccont@localhost gerrit plugin install -n importer.jar /path/to/importer.jar enabled.

  2. Starten Sie Ihre Gerrit-Instanz mit plugins.allowRemoteAdmin

  3. neu
  4. Das Plugin sollte im Web ui sichtbar sein

Danach ist der Prozess wie folgt:

  
  1. Führe den ersten Import des Projekts durch
  2.   
  3. Test auf das Ziel Gerrit, dass alles in Ordnung ist
  4.   
  5. Informieren Sie das Projektteam über die Projektverschiebung und verbieten Sie weitere Änderungen des Projekts im Quell-Gerrit-Server (z. B. durch   Berechtigungen oder durch Festlegen des Projektstatus auf schreibgeschützt)
  6.   
  7. Setzen Sie den Projekt-Import fort, um alle Änderungen zu erhalten, die nach dem ersten Import durchgeführt wurden
  8.   
  9. Vervollständigen Sie den Import und machen Sie ggf. ein Projekt im Ziel-Gerrit-Server beschreibbar
  10.   
  11. Informieren Sie das Projektteam, dass sie jetzt im Ziel-Gerrit-Server an dem Projekt arbeiten können
  12.   
  13. Rekonfigurieren Sie alle Tools von Drittanbietern (z. B. Jenkins), um gegen das Projekt auf dem Ziel-Gerrit-Server
  14. zu arbeiten   
  15. [optional] Löschen Sie das Projekt im Quell-Gerrit-Server mit dem delete-project-Plugin
  16.   

Wenn Sie zuerst einen ersten Import durchführen und den Import später fortsetzen, hat der   Vorteil, dass die Ausfallzeit für das Projektteam minimal gehalten werden kann.   Der anfängliche Projektimport kann einige Zeit dauern, aber der Lebenslauf sollte   sei schnell, da es nur das Delta seit dem Anfang übertragen muss   (last) importieren.

(Betreff: About.md )

Ich persönlich konnte den Importvorgang nicht ausführen. Es scheint, dass während der Importphase, nach Stunden der Arbeit in Arbeit, zumindest in unserem Netzwerk, wir mit $gerrit_site/bin/gerrit.sh restart begrüßt werden, was Netzwerk-Timeout bedeutet, bevor dies überhaupt zu einem Zustand kommt. Dies geschieht sogar mit kleinen Repos.

    
eis 20.11.2015 08:49
quelle
0

Ich konnte das Importer-Plugin zum Laufen bringen, bekam aber auch ständig 504 Fehler. Das Plugin fragt nach 500 Änderungen gleichzeitig (gelesen von GlobalCapability.DEFAULT_MAX_QUERY_LIMIT, welches fest auf 500 kodiert ist). Ich konnte den stable-2.13-Zweig des Plugins nicht erfolgreich erstellen, also habe ich einfach den Import wiederholt und erneut versucht, bis es schließlich erfolgreich war.

    
Jeff Stephens 28.08.2017 17:03
quelle

Tags und Links