Gibt es Nachteile bei der Aktivierung von Git Rerere?

107

Ich habe verschiedene Dinge über die Wiederholungsfunktion von git gelesen und denke darüber nach, sie zu aktivieren. Aber ich habe niemanden gesehen, der mögliche Probleme erwähnt hat, die bei der Verwendung auftreten könnten. Ich muss davon ausgehen, dass es einen Nachteil gibt, oder es wäre wahrscheinlich standardmäßig aktiviert. Gibt es also Nachteile bei der Aktivierung von Rerere? Welche potenziellen Probleme kann es verursachen, die sonst nicht auftreten würden?

Ryan C. Thompson
quelle
Wenn die automatische Wiederholung aktiviert ist und eine vorherige Auflösung angewendet wird , wird eine Meldung angezeigt? Wenn ja, wie sieht es aus? TIA!
Joeytwiddle
1
@joeytwiddle, nach diesem Artikel wäre es von der Form,Resolved 'index.html' using previous resolution.
sampablokuper

Antworten:

69

Wenn Sie eine Zusammenführung falsch durchführen, sie dann verwerfen und dann die "gleiche" Zusammenführung erneut durchführen, ist sie erneut falsch. Sie können jedoch eine aufgezeichnete Auflösung vergessen. Aus der Dokumentation :

git rerere forget <pathspec>

Dadurch werden die Konfliktlösungen zurückgesetzt, die für den aktuellen Konflikt in erneut aufgezeichnet wurden <pathspec>.

Achten Sie darauf, es auf bestimmten Pfaden zu verwenden. Sie möchten nicht alle Ihre aufgezeichneten Auflösungen überall wegblasen. (Es wurden forgetkeine Argumente verworfen , um dies zu verhindern, es sei denn, Sie geben ein, git rerere forget .um dies explizit anzufordern.)

Aber wenn Sie nicht daran denken, könnten Sie diese falsche Verschmelzung leicht in Ihre Geschichte aufnehmen.

MatrixFrog
quelle
13
Aus diesem Grund rererebleiben die Dateien mit Konflikten weiterhin als nicht zusammengeführt markiert, sodass Sie sie manuell hinzufügen müssen (hoffentlich nach dem Überprüfen / Testen), bevor Sie sie festschreiben. Sie können jederzeit git checkout -m <path>die ursprüngliche Version mit Konflikten überprüfen und die Auflösung bei Bedarf wiederholen.
Cascabel
1
Das würde Sinn machen! Klingt so, als ob Sie einen neuen Alias ​​benötigen.
Cascabel
5
Ich denke, das ist wahrscheinlich das Hauptproblem. Durch Aktivieren von Rerere können Fehler unerwartet eingeschlichen werden. Eine Zusammenführung, die Sie abbrechen (oder vielmehr rückgängig machen, indem Sie sie aus dem Verlauf löschen), könnte Sie später noch verfolgen. Grundsätzlich wird ein zweiter Verlaufsmechanismus eingeführt, der orthogonal zum tatsächlichen Verlaufsgraphen ist.
Ryan C. Thompson
3
@RyanThompson Abgebrochene Zusammenführungen wirken sich nicht auf die Wiederholung aus. (Ich wünschte oft, sie hätten es getan - ich habe manchmal eine Zusammenführung abgebrochen, weil ich sie falsch eingerichtet habe, und musste dann genau die gleichen Auflösungen vornehmen, wenn ich sie richtig eingerichtet habe.) Warum sollten Sie jemals eine Zusammenführung aus dem Verlauf löschen? TU das?
Marnen Laibow-Koser
40

Wie JC Hamano in seinem Artikel " Fun with rerere " erwähnt

  • Rerere erinnert sich daran, wie Sie die Konfliktregionen gelöst haben.
  • Rerere erinnert sich auch daran, wie Sie außerhalb der Konfliktregionen nachgebessert haben, um sich an semantische Veränderungen anzupassen.
  • Rerere kann die vorherige Auflösung wiederverwenden, obwohl Sie zwei Zweige mit anderen Inhalten als dem zuvor aufgelösten zusammengeführt haben .

Sogar Leute, die Rerere schon lange verwenden, bemerken den letzten Punkt oft nicht.

Wenn Sie also einen rererezu breiten Inhalt aktivieren , kann es aufgrund des letzten Punkts zu einer überraschenden oder verwirrenden Zusammenführungsauflösung kommen.

VonC
quelle
15
Die widersprüchlichen Kerle müssen noch übereinstimmen; Es ist ziemlich schwierig, ein falsches Positiv zu geben.
Cascabel
3

Ich habe Rerere global aktiviert. Ich habe wirklich keine Probleme bemerkt und es scheint normalerweise mein Leben einfacher zu machen.

Marnen Laibow-Koser
quelle
4
Hier gilt das gleiche. Keine Probleme in mehr als 2 Jahren.
Andrey Tarantsov
3

Ich habe ein Commit (in Gitk) ausgewählt, das nur eine Binärdatei enthielt. Cherrypick ist aufgrund eines Konflikts gescheitert (was natürlich ist) und ich habe den Konflikt gelöst, indem ich die Kirschpickel behalten habe. Ich war später überrascht, in einem anderen neu basierten Zweig festzustellen, dass sich meine DLLs nicht verhalten haben - nur um festzustellen, dass sie nicht als (ich spekuliere) automatische Konfliktlösung in die Neueinstellung übernommen wurden. Dies ist also der einzige Fall, in dem ich auf ein kontraintuitives (obwohl ich mir sicher bin, dass es vollkommen konsistent ist) Verhalten gestoßen bin (nachdem ich es erneut aktiviert habe).

Mr_and_Mrs_D
quelle
1
Heilung:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D
Im ursprünglichen Fall bekam ich den Konflikt nicht über das Pflücken von Kirschen, sondern über das Umbasieren, aber ich glaube nicht, dass es einen Unterschied macht
Mr_and_Mrs_D