Ich habe vor kurzem durch eine große Codebasis arbeiten, Refactoring und allgemein Verbesserung des Designs, um die Abdeckung zu erhöhen. Außerdem habe ich in einigen Dateien Überschüsse mithilfe von Anweisungen entfernt, Methoden verschoben, sodass ähnliche Funktionen nahe beieinander liegen, Regionen usw. hinzugefügt, aber nicht die Funktionalität des Codes in der Datei geändert.Gibt es Merge-Tools für die Quellcodeverwaltung, die Code verstehen?
In der Zwischenzeit beheben andere Entwickler Fehler und ändern Codezeilen hier und da. Wenn es um das Zusammenführen geht, kann dies natürlich ein Problem darstellen, da die Zeilennummern nicht mehr übereinstimmen und die Methoden möglicherweise verschoben wurden.
Jetzt verstehe ich die allgemeine Regel, dass es in einer quellenkontrollierten Umgebung eine gefährliche Sache sein kann, Methoden herum zu bewegen, und wir entschieden, dass der Nutzen die Kosten überwog. Was ich aber nicht verstehe, ist warum es so sein sollte.
sagen, dass meine ursprüngliche Datei ein einfacher Rechner war:
public class Calculator
{
public int Subtract(int a, int b)
{
return a + b;
}
public int Add(int a, int b)
{
return a + b;
}
}
Und ich beschlossen, dass ich die Methoden, um alphabetisch gesucht:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Subtract(int a, int b)
{
return a + b;
}
}
Während ein anderer Entwickler ist der Fehler in der subtrahieren Methode
public class Calculator
{
public int Subtract(int a, int b)
{
return a - b;
}
public int Add(int a, int b)
{
return a + b;
}
}
Ein Standard-Merge-Tool würde wahrscheinlich erfordern Sie manuell zusammenführen se zwei Dateien, aber eine, die die Funktionalität des Codes verstanden würde leicht in der Lage sein, diese beiden Änderungen zu vereinbaren. Gleiches gilt für das Entfernen oder Hinzufügen anderer Methoden, Kommentare, Regionen oder die Verwendung von Anweisungen.
Also (endlich!) Auf die Frage: Gibt es Merge-Tools, die ein intelligentes Verständnis der Funktionalität von Code haben und die beiden oben genannten Dateien ohne menschlichen Eingriff zusammenführen könnten? Wenn nicht, warum nicht? Gibt es irgendwelche Komplikationen, die dies zu einem unlösbaren Problem machen (natürlich verstehen, dass es nicht so einfach ist wie ich andeutete - aber ist es unmöglich aus irgendeinem Grund, dass ich nicht sehen kann?)
Ich benutze C# in mein Quellcode und würde etwas, das mit dem gearbeitet lieben, aber ich bin interessiert, wenn diese in der Welt der Programmierung besteht überall ...
ich über die Länge dieser Frage schon wirklich besorgt bin, aber bearbeitet, um hinzuzufügen, wie ich erwarten würde, dass das intelligente Quellsystem funktioniert:
Wenn die anfängliche Rechnerdatei im System überprüft wurde, würde p die Datei Esel und eine Hierarchie der Klasse erstellen:
File: Calculator.cs
|
|--Class[0]: Calculator
|
|--Method[0]: Subtract
|
|--Line[0]: return a + b;
|
|--Method[1]: Add
|
|--Line[0]: return a +b;
(Mit zusätzlichen Zeilen in es für Klammern etc ...)
Wenn ich in meinem Code überprüfen (die Methoden alphabetisch machen) aktualisiert er die Hierarchie so, dass Subtract zu Methode [1] und Add zu Methode [0] wird.
Der zweite Entwickler checkt seinen Code ein (der offensichtlich weiß, dass das Quellcodeverwaltungssystem auf dem Original basiert) und bemerkt, dass die Änderung in der ersten Zeile subtrahiert wird. Nun, anstatt diese Zeile für Zeile Nummer in der gesamten Datei zu finden, weiß es, dass es ein Calculator.cs/Calculator/Subtract/0 finden kann und die Tatsache, dass die Methode den Speicherort geändert hat, spielt keine Rolle Arbeit zusammenführen.
Was sollte das Ergebnis der "automatischen" Abstimmung sein? Das Problem ist nicht, die Sprache so sehr zu verstehen, als die Absicht des Programmierers zu verstehen - und das würde Telepathie brauchen! –
Ich hätte gedacht, dass ein System, das die Funktionalität des Codes verstanden und das vom Layout trennen könnte, sehen würde, dass die erste Änderung rein Layout war, also gilt das für das Layout der Datei und die zweite Änderung war reine Funktion, also gilt diese Änderung zu der Methode, nach der die funktionelle Veränderung stattfand, wo auch immer diese Methode jetzt sein mag. –
Mein Verdacht ist, dass so ein Biest nicht existiert, aber ich würde gerne andere Antworten sehen. Ich habe das Gefühl, dass ein solches System an AI grenzt und zu SkyNET VCS führen würde. ;) –