visual-studio - market - visual studio mac extensions



Vcproj-Dateien zusammenführen-SCM's Hölle (6)

Ich versuche normalerweise zu vermeiden, automatisch generierte Dateien unter SCM zu setzen. Automatisch generierte Dateien sollten aus Quelldateien generiert werden, die ein Entwickler kontrolliert, und diese können unter SCM gestellt werden. Wenn ein bestimmtes Werkzeug Daten in einem opaken und fragilen Format speichert, ist dies das Problem des Werkzeugs.

In Bezug auf Visual Studio, obwohl ich denke, dass es ordentliche Compiler, Bibliotheken und eine Debugging-Umgebung hat, glaube ich, dass die erzeugten Dateien (PRJ, SLN, RC) höchst problematisch sind. Abgesehen von den Problemen, die Sie erwähnen, ändern sie sich auch zwischen verschiedenen VS-Versionen. Aus diesem Grund schreiben wir unsere eigenen Makefiles und erstellen die Programme extern mit make. Außerdem teilen wir die Ressourcendateien in Teile auf, für die wir uns auf VS verlassen müssen, und auf solche, die wir mit einem normalen Editor handhaben können. Wir generieren viele Ressourcendateien automatisch aus einer höheren Beschreibung, die in benutzerdefinierten domänenspezifischen Sprachen geschrieben ist. Wir minimieren somit die Auswirkungen von Änderungen, die unter SCM schwierig zu handhaben sind.

Das Zusammenführen von Projekt- / Lösungsdateien ist ein bekanntes Desaster unter Entwicklern / SCM-Administratoren, die Zusammenführungen in ihrer Quellcodeverwaltung durchführen.

Nehmen wir zum Beispiel ein gängiges Szenario: Die Entwicklung erfolgt an einem Projekt / einer Lösung in zwei verschiedenen Zweigen. Wenn es Zeit ist, wieder in eine Hauptentwicklungslinie zu verschmelzen, gibt es eine sehr kleine Ähnlichkeit zwischen den VCPROJs (und SLNs).

Der Grund dafür ist, dass Visual Studio möglicherweise die Position der verschiedenen XML-ähnlichen Elemente in diesen Dateien ändert (und sie ändert). ZB können Debug und Release von Konfigurationen die Reihenfolge bei jedem Speichervorgang in der proj-Datei ändern. Dies macht es unmöglich, Änderungen aus jedem Entwicklungszweig leicht einzubeziehen, selbst wenn eine automatische Zusammenführung nicht in Betracht gezogen wird.

Ich kann davon ausgehen, dass Microsoft ein Perl-Hashing-System verwendet, um die vcproj-Strukturen zu halten, daher ist das Rendern der Dateien bei einer Sicherungsoperation nicht geordnet.

Ich möchte zuerst fragen: Hat jemand eine elegante Methode gefunden, um dies zu umgehen?

Zweitens möchte ich zwei Vorschläge machen:

  • Lassen Sie Microsoft die obigen Dateien bitte neu implementieren und beschränken Sie sie auf eine starre Reihenfolge der Elemente.

  • suche ein Werkzeug (oder schreibe eines), das die Dateien vcproj (xml-Format) und sln (sln-Format ...) alphabetisch, rekursiv (alle Elemente innerhalb von Elementen usw.) sortiert. Wenn Sie dieses Tool sowohl für Quell- als auch für Zieldateien verwenden, können Sie die Änderungen problemlos anzeigen (und zusammenführen), in der Hoffnung, dass Visual Studio das sortierte, zusammengeführte Projekt oder die SLN-Datei liest.

Alle anderen Ideen und Gedanken sind willkommen.


Answer #1

Sie sollten in Erwägung ziehen, Ihr Tool mit einem Trigger in Ihrem SCM zu verknüpfen (z. B. einen SVI-Haken), um die Neuordnung dieser Dateien zu erzwingen.

Dann hätten Sie die Chance, diese Elemente effizient zusammenzuführen.


Answer #2

Was wir mit Ressourcendateien machen (weniger Probleme mit Projektdateien), ist es, sie vor dem Zusammenführen zu sortieren. Wir haben den Zusammenführungsbefehl auf Plastic konfiguriert, um eine Sortierung durchzuführen (eine andere App, die wir dafür entwickelt haben, wir können den Code teilen, wenn Sie interessiert sind, nichts Besonderes), bevor Sie sich zusammenschließen, sodass alle zufälligen Umlagerungen verschwinden. .. Ich hoffe es hilft.


Answer #3

Project: Merge ist mein Werkzeug zum Vergleichen und Zusammenführen von XML-Dateien. Ich habe es ursprünglich geschrieben, weil genau dieses Problem mit Visual Studio-Projektdateien aufgetreten ist.

Es erkennt korrekt geordnete Elemente und / oder Attribute innerhalb der XML-Datei und löst automatisch fast alle "Konflikte" automatisch.


Answer #4

Überprüfen Sie die Installationsoptionen - stellen Sie sicher, dass alle Ihre Kollegen x64-Compiler-Komponente installiert haben (oder alle nicht haben)


Answer #5

Es gibt ein Google-Projekt namens gyp, das ähnlich wie CMake Visual Studio-Lösungen und -Projekte generiert. Teil dieses Projekts sind Python-Tools zum Sortieren von XML-Knoten und Attributen von .sln- und .vcproj-Dateien: pretty_sln und pretty_vcproj. Sie können sie unabhängig von http://gyp.googlecode.com/svn/trunk/tools/ herunterladen.

Ich habe bisher nur pretty_vcproj angeschaut, es erweitert auch .vsprop Dateien, die in den vcproj importiert wurden, wahrscheinlich um den genauen Inhalt von zwei vcprojs zu vergleichen. Das resultierende vcproj entspricht zwar nicht dem von Microsoft bereitgestellten Schema, aber es würde wahrscheinlich funktionieren, oder man könnte es ändern, um nur die Knoten "Configuration" und "Platform" zu sortieren, wobei alles andere intakt bleibt. Ich bin mir nicht sicher, ob es sich lohnt, da es anscheinend bereits andere Projekte gibt, die darauf abzielen, vcprojs zu normalisieren ...





merge