2010-02-24 17 views
21

Ho un grande progetto scritto in Delphi e voglio gestire le sue fonti usando Git. Ho creato repository Git, che include i sorgenti della mia applicazione e i componenti di terze parti. Tutto ciò che viene creato automaticamente viene creato utilizzando msbuild.File RES di Delphi e Git

Il problema più grande sono i file RES. Alcuni di essi vengono aggiornati ogni volta che ricostruisco la mia applicazione, altri no. Alcuni hanno sorgenti * .rc, altri no. Non posso ignorare tutti i file res (.gitignore) perché senza risorse il mio progetto non riuscirà a compilare. Inoltre, non posso includere i file res: cambiano da build a build, non voglio vederli in diff.

Cosa si fa con i file * .res in Git? Qualche consiglio?

risposta

8

Conservo i file RES di progetto in git (quelli che corrispondono al nome del dpr).

Credo che l'unica ragione per cui il file RES del progetto cambierà ogni volta che si costruisce è se si dispone di un numero di build incrementato, il che significa che è necessario mantenere la risorsa nel controllo del codice sorgente o non si cura del Costruisci il numero quindi dovresti disattivare questa opzione.

faccio anche i file RES che ho costruire da RC, che cambiano ogni compilare, quindi ho un gitignore per * .res e quindi aggiungere git add -f project.res per il progetto dei file RES

+0

Grazie per il suggerimento, ma ho 25+ componenti con sorgenti (e con file dannatamente res). Ci vorrà un sacco di tempo per scoprire quali sono i file res modificati e quali no. Ma il problema più grande è che alcuni res devono essere inclusi (quindi devo 'git add -f') e vengono cambiati ogni volta che ricostruisco i componenti. – Frantic

+0

Finalmente questo. Ci è voluto molto tempo, ma sono contento dei risultati. – Frantic

0

Non conosco GIT, ma con SVN ho semplicemente "SVN AGGIUNGI" solo quelli che contano, e non quelli generati automaticamente. Dal momento che i file non citati sono esclusi dai diff, anche questo è stato risolto.

1

Per definizione, i file RES sono file RC compilati. Quindi idealmente dovresti ignorare tutti i file RES e commettere solo modifiche RC. Se è successo in qualche modo che tu non abbia una sorgente RC per qualche particolare file RES, allora aggiungi a git solo questo file RES "orfano" - tali file non dovrebbero cambiare da build a build (perché non c'è alcun file RC da generare da loro). Se per alcuni strani motivi (Delphi, huh) tali file RES fanno il cambiamento, allora sei condannato.

Linea di fondo: i file RES sono obiettivi di compilazione - non è diverso da altri binari (obj, exe, ecc)

+8

In Delphi, il file RES del progetto è diverso da altri binari, non ha un RC corrispondente e contiene informazioni trovate in nessun altro luogo, come l'icona e i numeri di versione – jasonpenny

+0

, vedo. Quindi sei condannato (Delphi ftw!) A saltare attraverso i cerchi, altre risposte forniscono istruzioni dettagliate :) – ygrek

0

Potrebbe:

  • ignorare tutti .res file
  • generare i file .res che può essere generato (compilando lo script risorse file .rc)
  • aggiungere solo i file .res senza file .rc per generarli: se si aveva specificato in un .gitignore che devono essere ignorati, quindi aggiungerli è ok: non verranno visualizzati nel diff.
2

E 'fortemente consigliato di disattivare la "Numero di incremento automatico" nelle impostazioni del progetto, con qualsiasi tipo di sistema di controllo della versione. In questo modo è "sicuro" aggiungere i file .res al repository.

Ho cercato per molto tempo un modo per aggiornare automaticamente il numero di build nelle informazioni sulla versione nel file .res del progetto, ma la cosa migliore è aggiornare un file .rc in più con le informazioni sulla versione. In pratica, tuttavia, in genere aggiorno il numero di build all'attuale numero di versione di subversion solo subito prima della versione finale per un rilascio dei file binari.

15

Benvenuti nel club. Il file .res dell'applicazione in Delphi è un dolore nella parte bassa della schiena per tutti che utilizzano il controllo del codice sorgente. Si desidera utilizzare auto-inc-buildnumber ma questo rovina il controllo delle scorie. Quello che ho fatto è

  • dividere l'icona e le risorse di versione in questo modo:

    {$ R * _icon.res}

    {$ R * ._ version.res}

  • disabilita inc automatico della BuildNumber

  • aggiungere un evento pre-build per il progetto che
    • incrementa il numero di build in un file .ini corrispondente al progetto
    • genera un file RC con le informazioni di versione dal file .ini
    • compila un file .res dal file RC
  • aggiungere il file * _icon.res al controllo del codice sorgente, non cambia mai così questo è sicuro
  • aggiungere il file .ini con la versione informazioni di controllo del codice sorgente, si tratta di un file di testo, quindi è facile da diff

Lo strumento che ho scritto per generare la versione .res è software libero, available here e anche da SourceForge

Problemi correlati