Änderungen als bereits zusammengeführt oder absichtlich ignoriert mit hg pull / push / merge / graft?

8

Ich steige von Subversion auf Mercurial um, wo ich es gewohnt bin, mit svnmerge.py Änderungen zu verfolgen, die bereits zusammengeführt wurden oder deren Zusammenführung blockiert wurde:

%Vor%

Ich möchte etwas Ähnliches für hg pull / push / merge / graft tun können, so dass ich, wenn ich weiß, dass ich nie eine bestimmte Änderung zusammenführen will, sie einfach blockieren kann, um anschließend Rosinen zu pflücken Verschmelzung usw. in eine weitere Feuer-und-Vergessen-Affäre. Ich habe viel gegoogelt, aber ich habe keinen Weg gefunden, dies zu tun.

Es scheint auch keine Möglichkeit zu geben, eine Liste noch nicht gepfropfter Änderungen anzuzeigen.

Da ich oft nach anderen Entwicklern aufräume und ihnen bei ihren Zusammenführungen behilflich bin, ist es immens hilfreich, solche Dinge tun zu können, die man durchaus als "inverse Rosinenpickerei" bezeichnen könnte. das heißt, Änderungen, die Sie NICHT zusammenführen möchten, markieren und dann eine Massenzusammenführung des Rests durchführen.

    
cbehanna 21.12.2011, 05:36
quelle

1 Antwort

9

DAG-basierte Systeme wie Mercurial ans Git sind alles oder nichts: Wenn Sie zwei Zweige zusammenführen, führen Sie eine dreifache Zusammenführung des gemeinsamen Vorfahren und der beiden Zweige durch.

Die dreiseitige Zusammenführung ist nur mit der letzten Stufe jedes Zweigs verbunden. Zum Beispiel ist es egal, ob Sie Ihre Änderungen in 10 It 1000 Schritten vornehmen - das Zusammenführungsergebnis ist das gleiche.

Dies bedeutet, dass die einzige Möglichkeit, einen Änderungssatz zu ignorieren, ist, ihn vor der Zusammenführung zu löschen:

%Vor%

Dadurch wird der Änderungssatz in der Verzweigung abgebrochen, so dass der Eindruck entsteht, dass er nie aus der Perspektive der Dreiwege-Zusammenführung gemacht wurde.

Wenn Sie eine ganze Verzweigung haben, die Sie zusammenführen, aber ignorieren möchten, können Sie eine Dummy-Zusammenführung durchführen:

%Vor%

Dies geht durch die Zusammenführung, wird aber vor dem Festschreiben in den alten Zustand zurückversetzt.

Der beste Rat, den ich Ihnen geben kann, besteht darin, Ihren Workflow so zu strukturieren, dass die oben genannten Backouts nicht notwendig sind. Dies bedeutet, dass ein Bugfix für den ältesten Anwendungszweig festgelegt wird. Wenn beim Erstellen von Feature X ein Fehler gefunden wird, verwenden Sie hg bisect , um herauszufinden, wann der Fehler eingeführt wurde. Jetzt zurück zum ältesten Zweig, wo du den Fehler noch beheben willst:

%Vor%

füge dann den Bugfix in alle späteren Zweige ein:

%Vor%

Wenn der Bugfix nicht mehr zutrifft, sollten Sie noch zusammenführen , aber die nicht verwandten Änderungen wegwerfen:

%Vor%

Dies stellt sicher, dass Sie immer

verwenden können %Vor%

, um Changesets in der 2.2-Verzweigung anzuzeigen, die noch nicht in 3.0 zusammengeführt wurden.

    
Martin Geisler 21.12.2011 15:47
quelle

Tags und Links