1 Antworten
-
VonC
4. Mai 2019Diese Frage hat sich dieser patch Vorschlag Anfang 2018.
Philip Wood versucht zu markieren, das Konzept der "modifizierten Zeilen".
(Eine vereinfachte version seines patch es hier gemacht)Wenn eine Reihe von Zeilen geändert wird der Brocken enthält Streichungen, gefolgt von Einfügungen.
Korrekt Bühne eine Teilmenge der modifizierten Zeilen, die wir brauchen, um bis die ausgewählten Deletionen, die mit der ausgewählten Einfügungen sonst haben wir am Ende mit Streichungen und Kontext-Linien, gefolgt von Einfügungen, die nicht ist, was wir wollen.Das endete bis zu schwierig sein:
Zur Umsetzung der Inszenierung veränderter Linien muss der code pair up für jede gelöschte Zeile mit seinem Ersatz.
Dies geschieht durch die Gruppierung von aufeinanderfolgenden ausgewählten Linien zusammen, so hat es eine Liste der Gruppen von gelöschten Zeilen und eine andere Liste der eingefügten Zeilen, es dann Paare, die Deletionen und Insertionen, die durch Ihren index in der Liste.Philip begann, Zweifel zu haben:
Ich beginne zu sehen, warum alle anderen Programme, die ich habe versucht, beim schreiben dieses (
tig
,gitg
,gitk
undmercurial
's version vonadd -i
) nicht machen jeden Versuch, die Bühne modifizierten Zeilen richtig, wenn ich denke, Git, sollten die Möglichkeit haben, es zu tunQnd der Haupt-maintainer von Git Junio C. Hamano bestätigt diese Zweifel, mit dieser Antwort:
Ja, das ist eine Art Funktion, die kann man vorschlagen und implementieren, etwas, das gut funktioniert für einige der begrenzten Anzahl von Fällen verwendet man aber nicht in anderen Fällen.
Und es wird sehr schwer zu erklären, wie die Arbeit rund um die Umsetzung der Einschränkung, dass--das ist der Grund, warum ich nicht mehr auf "split in diesem Stück?", und nicht über Sie hinausgehen, wenn ich die original "inkrementelle hinzufügen" - Funktion.Ich denke, der wahre Grund, warum es so schwer ist, dass es keine gute definition für "geändert" in "Bühne modifizierten Zeilen".
Und schlimmer noch, es ist kein guter Weg, zu mechanisch, es herauszufinden, denn ein patch gibt nur "diese wurden gelöscht" und "diese werden Hinzugefügt", ohne dass Sie "diese Zeile in den gelöschten block entspricht, um diese zwei Zeilen in der hinzugefügten block" (d.h. "das original eine Zeile geändert wurde in dieser Sache im Ergebnis").