25 Stimmen

Delphi RES-Dateien und Git

Ich habe ein großes Projekt, das in Delphi geschrieben wurde, und ich möchte seine Quellen mit Git verwalten. Ich habe ein Git-Repository erstellt, das die Quellen meiner Anwendung und Komponenten von Drittanbietern enthält. Das ganze Zeug wird automatisch erstellt mit msbuild .

Das größte Problem sind die RES-Dateien. Einige von ihnen werden jedes Mal aktualisiert, wenn ich meine Anwendung neu aufbaue, andere nicht. Manche haben *.rc-Quellen, manche nicht. Ich kann nicht alle RES-Dateien ignorieren (.gitignore), denn ohne Ressourcen wird mein Projekt nicht gebaut. Außerdem kann ich res-Dateien nicht einbinden - sie ändern sich von Build zu Build und ich möchte sie nicht in den Diffs sehen.

Was machen Sie mit Ihren *.res-Dateien unter Git? Irgendwelche Ratschläge?

17voto

dummzeuch Punkte 10604

Willkommen im Club. Die .res-Datei in Delphi ist für alle, die die Versionskontrolle verwenden, ein Ärgernis. Man möchte auto-inc-buildnumber verwenden, aber das bringt die Versionsverwaltung durcheinander. Was ich getan habe, ist

  • teilen Sie das Symbol und die Versionsressourcen wie folgt auf:

    {$R *_icon.res}

    {$R *._version.res}

  • Auto-Inc der Baunummer abschalten

  • ein Pre-Build-Ereignis zum Projekt hinzufügen, das

    • erhöht die Build-Nummer in einer .ini-Datei, die dem Projekt entspricht
    • erzeugt eine .rc-Datei mit den Versionsinformationen aus der .ini-Datei
    • kompiliert eine .res-Datei aus der .rc-Datei
  • Fügen Sie die Datei *_icon.res zur Versionskontrolle hinzu, sie ändert sich nie, also ist dies sicher

  • Fügen Sie die .ini-Datei mit den Versionsinformationen zur Versionskontrolle hinzu; es handelt sich um eine Textdatei, die leicht zu vergleichen ist.

Das Tool, das ich für die Erstellung der .res-Datei geschrieben habe, ist freie Software, hier erhältlich und auch von OSDN

12voto

jasonpenny Punkte 2979

Ich bewahre meine Projekt-RES-Dateien in Git auf (diejenigen, die dem Namen des dpr entsprechen).

Ich glaube, der einzige Grund, warum sich die Projekt-RES-Datei bei jedem Build ändern würde, ist, dass Sie eine inkrementelle Build-Nummer eingestellt haben, was für mich entweder bedeutet, dass Sie die RES-Datei in der Versionskontrolle behalten müssen, oder dass Sie sich nicht um die Build-Nummer kümmern, so dass Sie diese Option deaktivieren sollten.

Ich habe auch RES-Dateien, die ich von RC baue, die sich bei jedem Kompilieren ändern, also habe ich einen Gitignore für *.res und füge dann git add -f project.res für das Projekt RES-Dateien

0 Stimmen

Danke für den Tipp, aber ich habe mehr als 25 Komponenten mit Quellen (und mit verdammt guten Dateien). Es wird viel Zeit in Anspruch nehmen, herauszufinden, welche Dateien geändert wurden und welche nicht. Aber das größte Problem ist, dass einige Res-Dateien enthalten sein müssen (also mache ich git add -f ) und werden jedes Mal gewechselt, wenn ich Komponenten umbaue.

0 Stimmen

Endlich ist es soweit. Es hat sehr viel Zeit gekostet, aber ich bin mit dem Ergebnis zufrieden.

2voto

ygrek Punkte 6606

RES-Dateien sind per Definition kompilierte RC-Dateien. Daher sollten Sie idealerweise alle RES-Dateien ignorieren und nur RC-Änderungen übertragen. Wenn Sie keine RC-Quelle für eine bestimmte RES-Datei haben, fügen Sie nur diese "verwaiste" RES-Datei zu Git hinzu - solche Dateien sollten sich von Build zu Build nicht ändern (weil es keine RC-Datei gibt, aus der sie erzeugt werden können). Wenn aus irgendwelchen seltsamen Gründen (Delphi, hm) solche RES-Dateien tun ändern, dann sind Sie dem Untergang geweiht.

Unterm Strich: RES-Dateien sind Kompilierungsziele - nicht anders als andere Binärdateien (obj, exe, etc.)

10 Stimmen

In Delphi unterscheidet sich die RES-Datei des Projekts von anderen Binärdateien, sie hat kein entsprechendes RC und enthält Informationen, die an keiner anderen Stelle zu finden sind, wie das Symbol und die Versionsnummern

0 Stimmen

Ich verstehe. Sie sind also dazu verdammt (Delphi ftw!), durch die Reifen zu springen, andere Antworten bieten detaillierte Anweisungen :)

2voto

Stijn Sanders Punkte 34557

Es wird dringend empfohlen, die Option "Auto increment build number" in den Projekteinstellungen zu deaktivieren, und zwar bei jeder Art von Versionskontrollsystem. Auf diese Weise ist es "sicher", die .res-Dateien zum Repository hinzuzufügen.

Ich habe lange nach einer Möglichkeit gesucht, die Build-Nummer in der Versionsinfo in der .res-Datei des Projekts automatisch zu aktualisieren, aber am besten ist es, eine extra .rc mit der Versionsinfo zu aktualisieren. In der Praxis aktualisiere ich die Build-Nummer jedoch in der Regel auf die aktuelle Subversion-Revisionsnummer seulement kurz vor dem endgültigen Build für eine Freigabe der Binärdateien.

0voto

Marco van de Voort Punkte 24852

Ich kenne mich mit GIT nicht aus, aber unter SVN füge ich einfach nur die wenigen Dateien hinzu, die von Bedeutung sind, und nicht die automatisch generierten. Da nicht versionierte Dateien von den Diffs ausgeschlossen sind, ist das auch kein Problem mehr.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X