2011-11-06 8 views
18

Ritengo che sia preferibile che tutti i file di testo abbiano il set di proprietà svn:eol-style=native. Ma qual è il modo più efficace per farlo?Qual è il modo migliore per avere svn: eol-style = nativo per i file di testo per impostazione predefinita?

Sviluppo programmi principalmente su Windows (utilizzando la riga di comando TortoiseSVN e svn.exe) e talvolta scrivo librerie C/C++ portatili per Windows e Linux. Al fine di prevenire il brutto mix-CR, LF problema sui miei file di origine, penso che svn:eol-style=native dovrebbe essere il "default", ma sfortunatamente non lo è.

So da Subversion Red Book che la configurazione di [auto-props] in ~/.subversion/config o %APPDATA%\Subversion\config aiuta, tuttavia, per impostazione del client. Che dire di alcuni sviluppatori del mio team che dimenticano di configurare quei file di configurazione (pensate allo sviluppo su più macchine virtuali)? Anche tutti si ricordano, cosa succede se si verifica qualche nuovo tipo di estensione/nome del file di testo? Come faccio a propagare correttamente questa modifica a tutti i file di configurazione su tutte le macchine di sviluppo nel mio team?

Tutto sembra essere un processo ingombrante.

+1

correlati: [Forza svn: eol-style = native sul server] (http://stackoverflow.com/questions/ 5671406/force-svneol-style-native-on-the-server) – blahdiblah

risposta

12

Subversion 1.8 modo

Poiché Subversion 1.8 ha ottenuto repository dictated configuration (RDC), per obbligatoria utilizzando le impostazioni comuni di tutte clienti per un dato repository, proprietà può e deve essere configurato nel repository di root (o tronco)

+0

Grazie. Quella soluzione di svn 1.8 è brillante e penso che risolva il 99% dei problemi. –

21

Che dire qualche sviluppatore nella mia squadra dimenticare di configurare tali file di configurazione (pensano dev su più macchine virtuali)?

Basta correggere l'errore.

Se si trova un file che è stato registrato in modo errato, non è troppo difficile da risolvere. Innanzitutto, modifica il file con lo stile di fine linea corretto per la tua piattaforma. Qualsiasi editor di programmazione dovrebbe essere in grado di cambiare gli stili con un comando integrato, oppure è possibile utilizzare un'utilità di tipo "fromdos" o "todos". Una volta che è fisso, impostare la proprietà e il check in:

svn propset svn:eol-style native filename 
svn commit filename 

copia del mio commento:

Un altro suggerimento è quello di utilizzare pre-commit hook, controllare svn: impostazioni EOL-stile (e la presenza) e fissare, se necessario

+1

Un altro suggerimento è di usare il gancio pre-commit, controllare svn: impostazioni eol (e presenza) e correggere se necessario –

+0

Potrebbe essere una buona idea. Può pre-commit hook aggiungere silenziosamente svn: eol-style = proprietà nativa al file impegnato prima di eseguire il commit nel repository? Quando svn update fa 'svn update' la volta successiva, ottiene automaticamente quella proprietà. –

+0

Penso - può: puoi usare qualsiasi comando in hook-script. Non mi limito a come ottenere file-list per i file in commit e singolo file dalla lista –

6

Questa dovrebbe essere una risposta rapida, non "tuffo nei dettagli e farlo da soli, ecco il link "versione.

Faremo solo f-in, ok? per Subversion 1.8+:

$ cd my_checkout_dir 

$ svn propset svn:auto-props ' 
### src 
*.c = svn:eol-style=native 
*.cpp = svn:eol-style=native 
*.h = svn:eol-style=native 
*.pch = svn:eol-style=native 
*.lua = svn:eol-style=native 
*.py = svn:eol-style=native 
*.pl = svn:eol-style=native 
*.txt = svn:eol-style=native 
*.sh = svn:eol-style=native;svn:executable 
### ui 
*.xib = svn:eol-style=native 
*.ui = svn:eol-style=native 
*.qrc = svn:eol-style=native 
### project 
*.pro = svn:eol-style=native 
*.pbxproj = svn:eol-style=native 
*.json = svn:eol-style=native 
*.xcworkspacedata = svn:eol-style=native 
*.plist = svn:eol-style=native 
' . 

$ svn commit -m 'Got really tired of svn:eol-style issues' 

Si prega di notare la chiusura single-preventivo e punto (cioè corrente dir) alla fine. Ottimizza questo elenco per le tue esigenze, copia svn propset svn:auto-props '…' . in unix/msys sh-terminal (sì, con Enters). Dopo il commit, tutti i file sotto my_checkout_dir erediteranno le proprietà corrispondenti al momento dell'aggiunta. File aggiunti prima del questa azione sarà non essere modificato. Come puoi vedere in *.sh e seguenti, puoi aggiungere ulteriori proprietà tramite ;.Se vuoi cambiare la lista, ripeti tutto di nuovo.

Qui ci sono le impostazioni predefinite suggerite da svn nella mia ~/.subversion/config per il riferimento:

### The format of the entries is: 
### file-name-pattern = propname[=value][;propname[=value]...] 
### The file-name-pattern can contain wildcards (such as '*' and 
### '?'). All entries which match (case-insensitively) will be 
### applied to the file. Note that auto-props functionality 
### must be enabled, which is typically done by setting the 
### 'enable-auto-props' option. 
# *.c = svn:eol-style=native 
# *.cpp = svn:eol-style=native 
# *.h = svn:keywords=Author Date Id Rev URL;svn:eol-style=native 
# *.dsp = svn:eol-style=CRLF 
# *.dsw = svn:eol-style=CRLF 
# *.sh = svn:eol-style=native;svn:executable 
# *.txt = svn:eol-style=native;svn:keywords=Author Date Id Rev URL; 
# *.png = svn:mime-type=image/png 
# *.jpg = svn:mime-type=image/jpeg 
# Makefile = svn:eol-style=native 
Problemi correlati