Frage

Ich habe geerbt nur ein Projekt, das Git gepflegt wurde mit. An einem Punkt wurde der Code auf 3 separate Systeme eingesetzt und jedes System verwalten ihre eigene dezentrale Git-Repository.

Jeder der drei Systeme erweitert das ursprüngliche Basissystem in drei verschiedene Richtungen. Keiner der drei Systeme wurden gegeneinander synchronisiert. Einige Änderungen sind auf dem Master-Zweig, andere sind auf neue Filialen.

Wie kann ich bringe die drei verschiedenen Quellen zusammen, so dass ich kann:

  1. finden eine gemeinsame Basis mit zu arbeiten;
  2. herauszufinden, welche Änderungen sind Fehlerbehebungen, die in allen drei Systemen angewandt werden sollte; und
  3. halten die drei Systeme in einer vernünftigen Art und Weise, so dass es nur ein gemeinsamer Zweig ist und die Anpassungen für die 3 verschiedene Systeme erforderlich trennen?
War es hilfreich?

Lösung

Ich würde wahrscheinlich durch Drücken aller Repositories getrennte Zweige in einem zentralen Repository starten, von dem ich rebase kann, verschmelzen etc zwischen Zweigen leicht.

Eine gute Visualisierungstool wie git-age , gitnub , GitX , kichern kann Wunder wirken, aber Ihre Aufgabe wird es wahrscheinlich ziemlich langweilig sein, es sei denn, man kann finde die Verzweigungspunkte. Wenn es ähnliche Patches auf allen Zweigen angelegt sind, können Sie (interaktiv) verwenden rebase neu zu ordnen Ihre Commits, so dass sie in der gleichen Reihenfolge. Dann können Sie beginnen ‚zippen up‘ Ihre Zweige, Bewegen des Verzweigungspunkt nach oben durch Commits in Master setzen. Eine schöne Beschreibung, wie Commits neu zu ordnen rebase Verwendung finden kann hier .

Die Chancen sind die Aktionen, die Sie ergreifen müssen, in den Links von der Git Howto Index . Eine gute Spickzettel ist immer schön in Reichweite zu haben. Auch ich vermute, das Followup an Eric Sinks post " DVCS und DAGs, Teil 1 " enthält etwas nützliches (es nicht, aber war eine interessante Lektüre nontheless).

Weitere gut-to-have-Links sind: Git Magie , Git Bereit und SourceMage Git-Führer

Ich hoffe, dass alle repos gut hatten Nachrichten begehen, die Ihnen den Zweck jedes Patch sagen, dann ist es das, oder Code-Review:)

Was, wie Anpassungen pflegen wir Glück mit dem folgenden gehabt haben:

Wir begannen durch Trennen (oder dem getrennten) den angepassten Code aus dem generischen Code. Dann haben wir zwei Ansätze versucht; beide das hat gut funktioniert:

  1. got Alle Implementierungen ihre eigenen Repositories, wo die Anpassung gehalten wurde.
  2. Alle Einsätze haben ihre eigene Niederlassung in einer ‚customization'-Repository.

Nach dem ersten Einsatz und zu sehen, dass der zweite war eine Tatsache, dass wir einige Zeit damit verbracht Zukunft Anpassung voraussehen / Schnittpunkte Duplizierung über die maßgeschneiderte repos zu reduzieren (alt. 1, was der Ansatz ist, dass wir zur Zeit verwenden) und in der Basis / Kern-Repo.

Und ja, wir versuchen gnadenlos Refactoring, wenn wir die Kern / Anpassung spaltete Abrutschen bemerken:)

Andere Tipps

OK. Nach einem großen einer Schinderei habe, ich es geschafft, es zu tun. Für alle anderen auf einer ähnlichen Aufgabe einsteigen, wird es eine Menge beinhalten:

git rebase

Befehle und wenn die Dinge haben es vermasselt:

git reflog

gefolgt von

git reset --hard HEAD@{ref}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top