Frage

ich Refactoring meine und anderer Leute Code die ganze Zeit . Wenn ich in einem Zweig arbeiten und nicht in Trunk, führt dies manchmal in einigen äußerst schmerzhaft verschmilzt, vor allem, wenn ich fusioniere nicht regelmäßig zu Trunk zurück (der Code in der Filiale langsam verschieben weg von der Trunc, und wenn die Leute ändern Trunk I haben, um herauszufinden, wie diese manuell auf den Zweig anwenden).

Die Lösungen, die ich kenne, sind entweder

  1. verschmelzen ständig zu und von Trunk - reduziert schmerzhaft verschmilzt, aber warum dann Arbeit in einer Filiale überhaupt
  2. ?
  3. Wenn Sie etwas umgestalten müssen, um Trunk zu wechseln, da das Refactoring zu tun und zu Ihrer Branche zusammenführen. - Ich finde das nicht sehr praktisch, da die tatsächlichen Kosten der Umgebungen für jedes Refactoring Schalt riesig

Was möchten Sie tun?

War es hilfreich?

Lösung

Refactoring in großem Maßstab muss zur richtigen Zeit in der Entwicklung Timeline durchgeführt werden. Wenn Sie das tun riesige Mengen an in der Nähe Release Refactoring Sie sich selbst verletzen am Ende dann, weil Sie schmerzlich verschmilzt zu einem Zeitpunkt einführen werden, wenn Änderungen minimiert werden sollte. Je mehr störend Ihr Refactoring wird die früher im Entwicklungszyklus sollte es passieren (und je spezieller Prozess sollte es für sie sein, beispielsweise Änderungen an die betroffenen Dateien so viel wie möglich für einen bestimmten Zeitraum stoppen).

Ständig vom und zum Stamm Zusammenführung ist in der Regel gute Praxis.

Warum arbeitet in einem Zweig überhaupt in diesem Fall? Weil Sie mehr Kontrolle haben (können Sie Aufgehen in Stamm stoppen sie für die Freigabe zu stabilisieren, zum Beispiel ohne checkins auf Ihren Entwicklungszweig zu stoppen). Weil Sie ein hohes Maß an Validierung um Fusion zu / von Stamm ohne Auswirkungen auf checkin Geschwindigkeit auf den Entwicklungszweig platzieren können viel.

Andere Tipps

Ich gehe mit 1, kleinen Änderungen vornehmen, wenn möglich und Check-in oft oder auch die Verschmelzungen schmerzhaft werden. eine separate Verzweigung können, wenn Sie in der gleichen Zeit auf andere Dinge zu arbeiten, müssen die Dinge einfacher oder das Refactoring mehr Zeit in Anspruch nimmt als ursprünglich gedacht. Der andere Vorteil ist, dass es einfacher macht mehrere Personen für die Teilnahme an der Refactoring zu nehmen und man kann die Dinge überprüfen, um den Zweig so oft wie Sie möchten.

Ich würde die folgende Strategie für ein Szenarium vorschlagen, wo Zeitfenster zwischen den Versionen sind mindestens 2 Monate.

Wenn Sie immer in der Nähe einer Freigabe starten, erstellen Sie einen Release-Zweig. Release-Zweig sollte als kein Refactoring bitte hier und behandelt werden, ich bin (fast) verfügt über eine kompletten Zweig. Es ist an diesem Punkt sollten Sie Ihre Bemühungen beginnen mit Schwerpunkt auf der Stabilisierung der Release auf der Release-Zweig . Merge alle Fehlerbehebung aus dem Release-Zweig auf den Stamm nach Bedarf zurück. Inzwischen ist der Stamm als ständig offen behandelt Refactoring . Auch wenn möglich versucht, Refactoring zu reduzieren, wie Sie näher an eine Major-Release erhalten und beschleunigt es in den Tagen unmittelbar nach einem.

Falls Sie sich im Anschluss an eine kontinuierliche Freisetzung Strategie (dh. Ein Release alle 1 bis 2 Wochen), sollten Sie keine separaten Refactoring und Codierung auf getrennten Zweigen, wenn Sie eine große chirurgische Erweiterung tun. In einem solchen chirurgischen Verbesserung Situationen (die nicht weniger als 3 Monate sein sollte jeweils im Abstand out), fallen Release von Ihrem Zeitplan im Voraus, wenn Sie beabsichtigen, eine Serie auszuführen, verwenden Sie einen der Zyklen für die Freigabe merge und erhöht Tests, halten Sie Ihre Daumen und dann los.

Änderungen müssen entweder quick (also nicht zu viele Änderungen unter Ihnen) oder auch local sein (so dass nur Sie über Änderungen in einer kleinen Anzahl von Plätzen kümmern).

Ansonsten kann die Zusammenführung sein genauso viel Arbeit wie das Refactoring war. Als Algorithmus, ist die optimistische Sperren einfach nicht funktionieren, wenn zu viele Transaktionen fehlschlagen und muss neu gestartet werden.

Im Grunde können Sie keine Situation zulassen, wo 20 Programmierer in einem Unternehmen alles jeden Tag die Namen von 50% der Verfahren, die in der Codebasis ändern. Und was das betrifft, wenn mehrere Leute immer an den gleichen Stellen Refactoring sind zugleich, dann sind sie nur die Arbeit der anderen sowieso rückgängig gemacht.

Wenn Programmierer viel Zeit verbringen verschmilzt manuell überwachen, dann anwesend Ihre Manager die Möglichkeit, die Produktivität zu steigern, indem geändert Aufgaben definiert und zugeordnet.

Auch „das ganze System Refactoring Fabriken überall verwenden“ ist keine Aufgabe. „Umgestalten dieser eine Schnittstelle und die Implementierungen Fabriken zu nutzen“, ist eine Aufgabe.

Dies ist, wo eine gute verteilte VCS zeichnet. Aber ich bin zu raten Sie bereits SVN begangen werden.

Ich persönlich nur das Refactoring tun und dann so schnell wie möglich zusammenführen, um den Konflikt Hölle zu vermeiden. Es ist nicht die produktivste Methode, aber die am wenigsten fehleranfällig.

Ich hatte einmal einen Zweig, der für ca. 3 Wochen schlafend saß, da das Feature ‚auf Eis gelegt‘ wurde, und es war unmöglich, zu verschmelzen. Ich habe gerade angefangen die Funktion immer wieder in einem neuen Zweig, die alten als Referenz für bestimmte Teile verwendet wird.

Auf die Gefahr des Seins offensichtlich, würde ich sagen, versuchen zusammen Verzweigung zu vermeiden. Die Menge an Overhead verursacht dies darf nicht unterschätzt werden. Auch wenn Sie denken, Sie können nicht länger abwehren (Release eines Systems in der Produktion, lassen zwei gebaut werden, sondern auch Anfragen ein zur Freigabe aus) noch versuchen, einen anderen Weg zu finden: Gibt es wirklich keine Möglichkeit, Funktionalität isolieren können ohne Verzweigung (zB Split ein „gemeinsames“ Projekt und einige Teilprojekte aus)? Gibt es wirklich keine Möglichkeit, die gesamten Code auf dem Kopf integrieren (z Strategie-Klassen erstellen, die die Unterschiede übernehmen oder Switches erstellen, die auf neue Funktionen ein- oder auszuschalten)?

Wenn Sie unbedingt auf Zweig, ich mit Option 1. Versuchen Sie gehen würde, wie kleine Änderungen wie möglich zu fusionieren und tun es oft.

früh COMMIT begehen oft.

Oder in diesem Fall ... Merge oft früh, zusammenführen.

Continuous Integration ist der Schlüssel ... 1 kleine Charge von Änderungen zu einem Zeitpunkt ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top