Zwei Git-Server zwischen Unternehmen synchronisieren

1651
Matthias Reisner

Es gibt zwei Firmen. Auf jedem läuft ein Git-Server. Wenn Firma A Code eincheckt, sollte dies auf dem Server der Firma B und umgekehrt aktualisiert werden.

Die beiden Server sollten sich untereinander synchronisieren.

Server-Betriebssystem: Ubuntu Server 14.04

GIT: Gitlab

Welche Lösung wäre in unserem Fall angemessen (Spiegeln, Haken, ..)?

4
Hast du das durchdacht? Angenommen, auf beiden Seiten werden Änderungen am selben Teil einer Datei vorgenommen. Was passiert, wenn beide gepusht werden und die Server versuchen, sich zu synchronisieren? Wer entscheidet über die Konfliktlösung? Im schlimmsten Fall geht die vorherige Änderung in diesem Prozess vollständig verloren. Diese Art von Dingen sollte eher dadurch gelöst werden, dass ein zentraler Server auf den anderen gespiegelt wird und Codeänderungen nur über einen von ihnen eingefügt werden. Wenn das nicht funktioniert, müssten Sie mindestens einen Betreuer haben, der dies manuell aussortiert. slhck vor 9 Jahren 0
Ja, wir haben das Problem bereits besprochen. Es wird eine klare Verpflichtung geben, wer für die Konfliktlösung verantwortlich ist. Es gibt nur einen Mann auf jeder Seite, der Änderungen entwickeln und möglicherweise vorantreiben wird. Matthias Reisner vor 9 Jahren 0
Ja, also gibt es noch eine andere menschliche Schicht :) Welche Git-Server-Software und welches Betriebssystem verwenden Sie speziell? Vielleicht können Sie das in der Frage erwähnen und einige Tags hinzufügen. Das würde es einfacher machen, von anderen entdeckt zu werden. slhck vor 9 Jahren 0
Mein Beitrag wurde mit den zusätzlichen Informationen aktualisiert. Aber welche Technik sollten wir für die Synchronisation verwenden (Spiegeln, Haken, ..)? Gibt es dafür gute Tutorials? Matthias Reisner vor 9 Jahren 0
Ich bin kein Experte dort. Ich habe GitLab für eine Weile eingerichtet und gepflegt, aber ich müsste mich selbst recherchieren. Sie könnten möglicherweise einen firmenunabhängigen Spiegel einrichten, der Push-Vorgänge von beiden Servern erhält, von denen beide auch ständig abrufen. slhck vor 9 Jahren 0

1 Antwort auf die Frage

2
it3xl

Git-Sync

  • Höchste Leistung
  • Basierend auf modernen Versionen von bash und awk (muss unter Mac OS aktualisiert werden)
  • Schwierig für Änderungen.
  • Löschen und Erstellen von Verzweigungen in einem anderen Repository.
  • Robuster für die Wiederherstellung der Synchronisation von jeder Position und von Grund auf.
  • Vorbereitet für eine zusätzliche Benachrichtigungsautomatisierung.
  • Für die Synchronisation wird ein einzelnes nicht-nacktes Git-Repository verwendet.

Pure Git mit Convention über Git

  • Viel mehr anpassbar
  • Ist langsamer
  • Wenn Sie während der Synchronisierung eine andere Seite festlegen, kann diese Zurückweisung abgelehnt werden (ein zweiter Versuch erforderlich).
  • Minimale Tech-Abhängigkeiten
  • Sie können keine Verzweigungen auf einer anderen Seite löschen.
  • Bare Git-Repositorys werden für die Synchronisation verwendet.

Allgemeine Notizen

  • Hängen Sie nicht von der Git-Server-Implementierung ab.
  • Schutz vor gelegentlichem Löschen haben.
  • Lange in einer Produktion getestet.
  • Die Git-Tags-Synchronisierung wurde entfernt, da GitLab das Löschen von Tags gerne blockiert.
  • Failover und automatische Wiederherstellung der Synchronisation werden unterstützt. Speziell für Netzwerkprobleme.
  • Für Hunderte von Suttle-Fällen ausgelegt, die ich hier nicht beschreiben möchte.

Wie benutzt man

  • Wählen Sie für jedes Repository ein Präfix aus. Nur Zweige mit solchen Präfixen werden synchronisiert. Siehe Namenskonvention unten.
  • Beschreiben Sie beide Repositorys in einer einfachen Konfigurationsdatei
  • Führen Sie das Synchronisationsskript regelmäßig aus
  • Die Lösung wird pro Repository (vs pro Server) angewendet. Es können beliebig viele Synchronisationspaare erstellt werden.

Namenskonvention

Es ist ein beliebiger vorangestellter Name. Jede Seite besitzt ein Präfix, und nicht-schnelle Vorwärtskonflikte für vorangestellte Git-Refs werden zu Gunsten eines Besitzers gelöst.
Beispiele
company1/entwickeln, company2-entwickeln
company1/JIRA-123, company2-JIRA-321

Andere Ideen

Ansätze zum Synchronisieren entfernter Git-Repositorys

Die Situation

Angenommen, wir haben Teams in separaten Unternehmen. Jedes Team besitzt ein eigenes Repository, das auf einem eigenen separaten Git-Server gehostet wird. Dies ist häufig bei Anbieter-Client-Szenarien der Fall.