2009-04-29 9 views
11

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.

+0

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! –

+0

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. –

+0

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. ;) –

Antwort

3

Ich denke, dass Source Code in Database eine mögliche Antwort auf Ihre Frage ist. Die allgemeine Idee ist, dass Sie keine Versionsdateien, sondern Versionsblöcke von Code bereitstellen. Das Versionsverwaltungssystem kennt den Code-DOM und lässt Sie das Code-DOM abfragen, um Funktionen, Klassen, Was-Haben-Sie, zum Editieren, Kompilieren usw. zu überprüfen.

Da die Reihenfolge der Methoden doesn Es spielt keine Rolle, dass sie nicht in irgendeiner Reihenfolge in der Datenbank gespeichert sind. Wenn Sie die Klasse auschecken, können Sie die Reihenfolge angeben, die Ihnen am besten gefällt (alphabetisch, öffentlich/geschützt/privat usw.). Die einzigen Änderungen, die wichtig sind, sind diejenigen, bei denen Sie die + zu einer - wechseln. Sie haben keinen Konflikt aufgrund der Neuanordnung der Methoden.

Leider ist SCID immer noch sehr jung und es gibt nicht viele Tools dafür. Es ist jedoch eine interessante Entwicklung in der Art und Weise, wie Code angezeigt und bearbeitet wird.

Edit:Here's another reference for SCID

+0

Danke für die Links, sieht aus wie die richtige Idee und komischerweise, als ich schrieb "Mit zusätzlichen Linien für Klammern etc ..." in meiner Bearbeitung oben dachte ich eigentlich "Schrauben Sie die Klammern, lassen Sie die Quellcodeverwaltung hinzufügen sie und beenden Sie die Tab/Space Wars ", wollte aber das Problem nicht trüben. Schön zu sehen, dass wir auf diesem Weg sind, auch wenn wir noch nicht ganz da sind. –

4

Unser Ansatz mit Plastic SCM ist noch weit davon entfernt, „vollständig“, aber es ist bereits veröffentlicht und kann in dieser Art von Situationen zu helfen. Schauen Sie sich Xmerge an. Natürlich wird das Feedback mehr als willkommen sein und einige kostenlose Lizenzen vergeben ;-)

+2

Sieht gut aus, aber offensichtlich nicht 100% der Funktionalität, auf die ich (noch) gehofft hatte. Ist das Merge-Tool separat verfügbar? Leider habe ich nicht die Macht, eine komplette Änderung des SCM-Systems zu organisieren, wo ich arbeite, aber eine Desktop-Version dieser XMerge-Funktionalität könnte sehr praktisch sein. –

+0

Normalerweise nicht, aber schreiben Sie uns eine Zeile an unsere Support-E-Mail (Unterstützung bei codicesoftware.com) und wir werden darüber reden – pablo

+0

Und überprüfen Sie auch dies: http://codicesoftware.blogspot.com/2010/07/xmerge-to -merge-refactored-code.html, es ist unser neues Xmerge mit noch besserer Refactor-Unterstützung. Hoffe du magst es! – pablo

Verwandte Themen