Hintergrund: Ich habe kürzlich eine Reihe von Projekten in meinem Unternehmen geerbt und versuche, einige grundlegende Probleme bei der Behandlung zu lösen. Die früheren Entwickler (die nicht mehr im Unternehmen sind) verwendeten nämlich keine Form der Quellcodeverwaltung, erstellten wenig Dokumentation und verfügten nicht über wirklich gute Entwicklungsprozesse.
Jetzt habe ich drei Server mit Projekten (Entwicklung, Staging, Produktion), die hauptsächlich aus Websites und Anwendungen und Tools bestehen, die für von uns verwendete Anwendungen und APIs von Drittanbietern erstellt wurden, bis hin zu Speichern von SQL-Skripten und anderen Dingen. Mein erster Gedanke war, all dies in Git zu integrieren, bevor Änderungen und Korrekturen vorgenommen werden, aber es fällt mir schwer, den besten Weg zu finden, dies zu tun.
Viele frühere Entwicklungen wurden direkt auf den Produktionsservern durchgeführt, wodurch eine Kluft zwischen den Codebasen der einzelnen Server entstanden ist. Es ist nicht sofort klar, wo all die Unterschiede liegen - ich sehe Fehlerbehebungen auf der Produktionsseite, die nicht auf Entwicklung / Staging übertragen werden, sowie neue Funktionen auf der Entwicklung, die nicht in Richtung Staging / Produktion verschoben wurden .
Frage: Was wäre der beste Weg für mich, diese zu organisieren und in Git zu verschieben? Wie würde ich meine Repos / Zweige strukturieren, um den Unterschieden im Code Rechnung zu tragen?
Ich habe überlegt, die Entwicklung von Klonen des Produktionsservercodes fortzusetzen und die Entwicklungs- / Staging-Codebasen als historische Referenz beizubehalten. Wäre dies möglicherweise ein Anfangspunkt, wenn man bedenkt, dass ich sowieso nichts über den Entwicklungs- / Staging-Code weiß? Ich könnte einfach Repos der Produktionsserver für jede Website, jedes Tool, jeden Skriptsatz usw. erstellen, Zweige für den vorhandenen Entwicklungs- / Staging-Code erstellen, und jede neue Entwicklung würde von der Codebasis des Produktionsservers verzweigen. Macht das Sinn?
quelle
Antworten:
Schieben Sie das Produktionsmaterial in den
master
Zweig eines neuen Repos. Erstellen Sie daraus einendevelop
Zweig, und führen Sie dann den Staging-Server darin zusammen. Es kann zu Konflikten kommen, die gelöst werden müssen. Sobald diese behoben sind, erstellen Sie einen weiterenfeature_branch
vondevelop
und führen Sie den Entwicklungsserver darin ein. Lösen Sie auftretende Konflikte.Damit stehen Ihnen 3 Zweige zur Verfügung, die Ihre Produktions-, Staging- und Entwicklungsumgebungen darstellen. Produktion ->
master
, Inszenierung ->develop
, Entwicklung ->feature_branch
. Die gesamte Entwicklung erfolgt somit amfeature_branches
und wird erst dann in dendevelop
Zweig integriert, wenn die Funktion abgeschlossen, getestet und stabil ist. Da es stabil ist, kann es als Inszenierung verwendet werden. Schneiden Sie einenrelease
Zweig ab,develop
wenn Sie bereit sind, ihn freizugeben, binden Sie alle losen Enden zusammen, fügen Sie diesen zusammenmaster
, und dann haben Sie Ihren neuen Produktionsaufbau.Eine Ihrer ersten Aufgaben nach dem Einrichten sollte darin bestehen, das
feature_branch
Zurück indevelop
* und danndevelop
wieder in zusammenzuführenmaster
. Beachten Sie, dass derfeature_branch
Code möglicherweise nicht getesteten Code und Funktionen enthält. Seien Sie daher vorsichtig, wenn Sie ihn indevelop
und dann zusammenführenmaster
. Sobald dies erledigt ist, sollten alle Zweige denselben Code enthalten, und jede Entwicklung, die auf dem Produktionsserver durchgeführt wurde, wird jetzt zurück in den Entwicklungsserver portiert.In diesem Modell befindet sich jedes Projekt in einem eigenen Repo, und dieses Repo verfügt über einen Zweig
master
und einendevelop
Zweig sowiefeature_branches
für alle ausgeführten Arbeiten.BEARBEITEN, um Kommentare zu adressieren: Ja, das ist Gitflow.
Diese Strategie (oder Gitflow im Allgemeinen) behält das vorhandene 3-Ebenen-System (Produktion, Staging, Entwicklung) mit einem klaren Zusammenführungspfad von der Entwicklung bis zur Produktion bei. Durch den Import der Codebasen auf diese Weise können auch die Zweige synchronisiert werden, während der Status Quo in der Produktion beibehalten wird - zumindest bis die Zusammenführungen getestet werden können. Damit werden einige Ziele erreicht: Der Code wird in der Quellcodeverwaltung gespeichert, die verschiedenen Codebasen werden synchronisiert und zusammengeführt (es gibt also keine Bugfixes mehr in der Produktion, aber keine Entwicklung mehr) und es wird ein nützlicher Prozess für die Zukunft bereitgestellt (ein Prozess, der gut definiert ist und von vielen Menschen / Teams / Unternehmen verwendet). Wenn das OP feststellt, dass Gitflow für seine Projekte / Teams / Unternehmen nicht gut geeignet ist, während er es verwendet / das Unternehmen wächst, dann ist es '
* Möglicherweise möchten Sie einen anderen Feature-Zweig ausschneiden, alle offensichtlichen neuen Features entfernen und diesen Zweig in
develop
(und dann inmaster
) zusammenführen. Dies verhindert, dass Sie zusätzlich zu allen anderen Tests, die Sie durchführen, neue Funktionen testen müssen.quelle
Ich werde den
staging
Code als beste Basis für Ihren ersten Import empfehlen . Das liegt daran, dass es Änderungenproduction
gibtstaging
, die aufgrund der Hotfixes nicht vorhanden sind, aber weitaus weniger, wenn Änderungenstaging
daran nicht vorhanden sindproduction
. Ebenso gibt es Änderungen indevelopment
, die nicht instaging
, aufgrund der neuen Funktionen, aber wahrscheinlich weit weniger , wenn Änderungen instaging
denen nicht sinddevelopment
.Beachten Sie , Sie nicht wollen
staging
Baseline nach dem ersten Import sein. Dies ist nur eine vorübergehende Situation, da Änderungen zuvor nicht verfolgt wurden. Verzweigungsvorgänge laufen viel reibungsloser ab, wenn Sie Änderungen hinzufügen , anstatt sie zu entfernen. Wechseln Sie nach dem ersten Import zu einem Verzweigungsmodell, das Ihren Anforderungen am besten entspricht.Überprüfen Sie also Ihren
staging
Code in einemstaging
Zweig,git checkout -b master staging
erstellen Sie dann einenmaster
Zweig und checken Sie dort Ihren Produktionscode ein. Führen Sie dann eine ausgit checkout -b development staging
, um Ihrendevelopment
Zweig zu erstellen , und überprüfen Sie dort Ihren Entwicklungscode.Jetzt ist Ihre Besuche
development
Zweig und verschmelzenmaster
in ihm. Auf diese Weise können Sie die wahrscheinlich große Menge an Zusammenführungskonflikten lösen und gleichzeitigmaster
aufzeichnen, was tatsächlich in der Produktion ist.development
Enthält jetzt alle Änderungen aus jeder Umgebung. Sie können jetzt zu dem für Sie am besten geeigneten Verzweigungsmodell wechseln.quelle
Es ist eine gute Idee, die Geschichte zu haben. Ich würde das Repository (oder eines für jedes Produkt) aus der stabilsten Umgebung erstellen. Erstellen Sie Zweige oder Unterschiede für die anderen.
Auf hohem Niveau:
XYZ
Archive-XYZ
XYZ
Quelle (außer .git)Alternativ, wenn Sie dem Wert davon skeptisch gegenüberstehen,
git diff > XYZ.diff
anstatt sich tatsächlich zu verpflichten und zu pushen und die Unterschiede zu archivieren.In beiden Fällen sollten Sie in einem Zustand enden, in dem Sie den in jeder Umgebung ausgeführten Code leicht vergleichen können, um einen einzelnen Startpunkt für jedes Projekt festzulegen. Und wenn etwas kaputt geht, können Sie Ihre Änderungen theoretisch mit einer der drei Umgebungen vergleichen.
quelle