Frage

Ich habe kürzlich eine große Codebasis durchgearbeitet, die das Design refaktoriert und im Allgemeinen verbessert, um die Abdeckung zu erhöhen. In einigen Dateien, in denen ich überschüssiges mit Anweisungen entfernt habe, haben ich Methoden bewegt, so dass ähnliche Funktionen nahe beieinander, Regionen usw. hinzugefügt werden, aber die Funktionalität des Codes in der Datei nicht tatsächlich geändert hat.

In der Zwischenzeit reparieren andere Entwickler an anderer Stelle im Team Fehler und ändern hier und da Codezeilen. Wenn es darum geht, dies zu verschmelzen, kann dies ein Problem sein, da die Zeilennummern nicht mehr übereinstimmen und Methoden möglicherweise verschoben sein.

Jetzt verstehe ich die allgemeine Regel, dass es in einer Quelle kontrollierte Umgebung gefährlich sein kann, Methoden zu bewegen, und wir beschlossen, dass der Nutzen die Kosten überwiegt. Was ich jedoch nicht verstehe, ist, warum es so sein sollte.

Sagen Sie, dass meine erste Datei ein einfacher Taschenrechner 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 entschied, dass ich wollte, dass die Methoden alphabetisch sind:

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 den Fehler in der Subtrahetmethode beharrte

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 -Zusammenführungs -Tool müssten wahrscheinlich diese beiden Dateien manuell zusammenführen, aber eines, das die verstanden hat Funktionalität des Code können diese beiden Änderungen leicht in Einklang bringen. Gleiches gilt für das Entfernen oder Hinzufügen anderer Methoden, Kommentare, Regionen oder Verwendung von Anweisungen.

Also, um (endlich!) Zu der Frage zu kommen: Gibt es da draußen irgendwelche Zusammenführungswerkzeuge, die ein intelligentes Verständnis der Funktionalität von Code haben und die beiden oben genannten Dateien ohne menschliche Intervention verschmelzen könnten? Wenn nicht, warum nicht? Gibt es Komplikationen, die dies zu einem unlösbaren Problem machen (natürlich ist ein Verständnis, dass es nicht so einfach ist, wie ich es impliziere - aber ist es aus irgendeinem Grund unmöglich, dass ich nicht sehen kann?)

Ich benutze C# in meinem Quellcode und würde etwas lieben, das damit funktioniert hat, aber ich interessiere mich, wenn dies irgendwo in der Welt der Programmierung existiert ...


Ich bin bereits wirklich besorgt über die Länge dieser Frage, aber bearbeitet, um hinzuzufügen, wie ich erwarten würde, dass das intelligente Quellsystem funktioniert:

Wenn die anfängliche Taschenrechnerdatei im System überprüft wurde, würde die Datei analysiert und eine Hierarchie der Klasse erstellt:

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 Linien für Zahnspangen usw.)

Wenn ich meinen Code überprüfe (die Methoden alphabetisch mache), aktualisiert er die oben genannte Hierarchie, sodass Subtrahiert zu Methode [1] und Add wird Methode [0].

Der zweite Entwickler überprüft in seinem Code (was offensichtlich das Quellvertretungssystem auf dem Original basiert) und bemerkt die Änderung der ersten Zeile in Subtrahieren. Anstatt diese Zeile nach Zeilennummer in der Gesamtdatei zu finden, weiß sie nun, dass sie einen Taschenrechner finden kann. Arbeit zusammenführen.

War es hilfreich?

Lösung

ich denke, dass Quellcode in der Datenbank ist eine potenzielle Antwort auf Ihre Frage. Die allgemeine Idee ist, dass Sie keine Dateien, Ihre Versionsblöcke von Code, nicht versionieren. Das Versionsversionssystem kennt den Code-DOM mit und ermöglicht es Ihnen, den Code-DOM zu befragen, um Funktionen, Klassen, What-Have-you, zum Bearbeiten, Kompilieren usw. zu überprüfen.

Da die Reihenfolge der Methoden nicht unbedingt von Bedeutung ist, werden sie nicht in der Datenbank mit Blick auf die Reihenfolge gespeichert. Wenn Sie sich die Klasse ansehen, 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 wechseln + zu einem -. Sie werden keinen Konflikt haben, weil Sie die Methoden neu ordnen.

Leider ist SCID immer noch sehr jung und es gibt nicht viele Werkzeuge dafür. Es ist jedoch eine ziemlich interessante Entwicklung in der Art und Weise, wie man den Code betrachtet und bearbeitet.

Bearbeiten: Hier ist eine weitere Referenz für SCID

Andere Tipps

Unser Ansatz mit Plastik -SCM ist immer noch weit davon entfernt, "vollständig" zu sein, aber es ist bereits veröffentlicht und kann in solchen Situationen helfen. Sich ansehen Xmerge. Natürlich wird das Feedback mehr als willkommen sein und einige kostenlose Lizenzen gewähren ;-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top