Ich versuche effektive Wege zu finden, wie andere das folgende Problem gelöst haben. Bei der Arbeit mussten wir einen Software-Patch (zur Installation auf Endbenutzersystemen) veröffentlichen, der nur für einen bestimmten Kunden sichtbar sein soll. Der benutzerdefinierte Code befindet sich in einem eigenen Versionsverwaltungszweig. Das Problem ist, dass wir zwei parallele Codezeilen (und Build-Skripte) haben, um synchron zu bleiben, und jedes Mal, wenn wir den ursprünglichen Code patchen, müssen wir den kundenspezifischen Code patchen und testen.
Ich bin gespannt, wie andere Organisationen mit diesem Szenario umgehen. Wir sind offen für Geschäftslösungen und nicht nur für technische Lösungen (im Zusammenhang mit der Quellcodeverwaltung). Wir haben beispielsweise darüber gesprochen, dem Kunden mitzuteilen, dass er keine Updates für diesen Zweig erhalten kann.
Unsere Verzweigungsstrategie ist wie folgt (basierend auf dem Visual Studio TFS Branching Guide , obwohl wir Subversion dafür verwenden)
hg
odergit
ich schlage vor, dass Sie dies in Betracht ziehen, aber ich weiß nicht, ob TFS etwas Ähnliches hat.svn
Mittel , die sie Ihren normalen Arbeitsablauf nicht vollstopfen. Wenn Patch-Warteschlangen nützlich erscheinen, können Sie sie mit git-svn oder hgsubversion ausprobieren . Die Verwendung eines DVCS-Frontends, um einen kniffligen Arbeitsablauf zu glätten,svn
kann sogar dazu führen, dass Menschen über einen Umstieg auf einen DVCS-Großhandel nachdenken, um alle anderen Vorteile zu nutzen.Antworten:
Wenn Sie kundenspezifische Patches ausgeben, haben Sie sofort eine neue Version Ihres Produkts erstellt, die neben dem Produkt gepflegt werden muss. Das bedeutet, dass Änderungen zwischen den beiden Versionen weitergegeben werden müssen. In der Regel sind kundenspezifische Patches Anpassungen, deren Eigentümer der Kunde sein sollte, einschließlich des Quellcodes.
Es ist unwahrscheinlich, dass ein Patch zur Behebung eines Problems in den Hauptzweig gelangt, es sei denn, dies ist eine nicht optimale vorübergehende Behebung für ein unmittelbares Problem. In diesem Fall muss der Patch nur so lange gepflegt werden, bis der erwartete Fix in die Hauptlinie gelangt.
quelle
Mir scheint, der Schlüssel ist "sichtbar" - was ist, wenn überhaupt kein separater Code-Zweig vorhanden ist, sondern eine Konfigurationsoption, die das Verhalten ändert?
quelle
Sehen Sie das als kurzfristige oder langfristige Sache? Tatsache ist, dass das Unternehmen bereits beschlossen hat, diesen Kunden so kurzfristig aufzunehmen, dass es bereits eine Geschäftsentscheidung ist, die in erster Linie durch Geschäftspraktiken zu lösen ist (Übernahme der zusätzlichen Kosten / Belastung des Kunden für die Kosten).
Auf lange Sicht werden Sie wahrscheinlich Einsparungen erzielen, wenn Sie die Software neu faktorisieren, um den Kundenanforderungen durch Konfiguration (oder Einrichtung usw.) gerecht zu werden.
Wenn dies relativ kurzfristig bedeutet, dass Sie diese Änderungen bald wieder in der Haupt- / Entwicklungsbranche zusammenführen und alle Benutzer die Änderungen ebenfalls sehen, ist es wahrscheinlich akzeptabel, innerhalb der Grenzen Ihrer aktuellen Situation zu arbeiten. Wie ich bereits sagte, sollte die Entscheidung, was zu tun ist, getroffen worden sein, als die Entscheidung getroffen wurde, den Kunden aufzunehmen.
Um es kurz zu machen. Langfristig technisch reparieren, kurzfristig damit umgehen.
Natürlich gibt es einen Punkt, an dem es sich um einen Münzwurf handelt. Wenn Sie an diesem Punkt sind, würde ich tun, was die Entwickler bevorzugen.
quelle
Wir verwenden auch Subversion - und wir stoßen auf genau dieses Szenario.
Hier sind einige wichtige Punkte zu beachten:
Während es notwendig ist, spezifische Filialen für Kunden zu vermeiden, muss der Bedarf so gering wie möglich gehalten werden. Fragen Sie immer, ob es möglich ist, die Lösung zu verallgemeinern, die möglicherweise für alle funktioniert.
Kundenspezifische Filialen müssen aus einem neuen Release stammen. Angenommen, Sie haben eine Version 1.2 und haben von Version 1.2.1 bis 1.2.11 abgeleitete Versionen - den Kundenzweigen sollten alle Patches erlaubt sein, daher muss der Kundenzweig mit der Hauptversion kompatibel bleiben .
Die kundenspezifische Filiale muss neu erstellt werden, wenn Sie eine neue, nicht kompatible Version starten. Der unglückliche Teil ist, dass Sie die Arbeit möglicherweise erneut ausführen müssen . Eine Lösung kann darin bestehen, alle Patches aus Kundenfilialen zu erstellen, die extrahiert werden müssen, und alle noch kompatiblen Patches können auf neue Kundenfilialen angewendet werden.
Unter keinen Umständen sollten Sie kundenspezifische Änderungen zurückschieben, um Zweigstellen oder Amtsleitungen freizugeben. Idealerweise sollte man jedoch versuchen, die Arbeit so zu verallgemeinern, dass diese kundenspezifische Arbeit reduziert bleibt.
Ich habe versucht, diese Idee zusammenzustellen, um zu zeigen, in :
quelle
Wie wäre es mit der Einführung eines Erweiterungsmechanismus in Ihren Code?
Ihr Hauptcode hat:
Wenn das Programm gestartet wird, sucht es in seinem Startordner nach DLL / moralischen Äquivalenten für lokale Anpassungen. Wenn es eine findet, wird sie geladen und enthält möglicherweise eine firmenspezifische Version von Foo
FooForABC implementiert dasselbe Verhalten wie Foo, überschreibt jedoch die erforderlichen Funktionen, um das von ABC benötigte Verhalten bereitzustellen. Die Technik sollte flexibel genug sein, um jedes Szenario zu bewältigen, das Sie unterstützen müssen.
quelle