2009-07-16 13 views
27

Con la proprietà svn: ignore, c'è un modo posso specificare quello che voglio ignorare in base a modelli che non voglio ignorare? In altre parole, voglio ignorare tutto ma i file terminano in .xyz. Come potrei fare per farlo (se è anche possibile)?Usando svn: ignore per ignorare tutto, ma alcuni file

Un'opzione che ho esplorato sta commettendo tutto ciò che voglio essere versionato, quindi impostando la svn: ignore proprietà sulla directory per essere '*', quindi non significa altri file ma quello che ho già commesso sarà versionato . Questo è il meglio che posso inventare, ma mi sembra che se dovessi aggiungere un altro file per essere versione, dovrei fare più commit ... uno per rimuovere la svn: ignora la proprietà, un'altra per aggiungere/commit il nuovo file (s), e poi un terzo per cambiare svn: ignora di nuovo a '*'.

I tuoi pensieri?

risposta

10

No, non esiste un abbinamento esclusivo come descritto. This article elenca le possibilità per la corrispondenza del modello. È limitato a:

  • ? - Corrisponde a qualsiasi singolo carattere
  • * - Corrisponde a qualsiasi stringa di caratteri, inclusa la stringa vuota
  • [ - Inizio definizione di una classe di caratteri terminato da ], utilizzato per abbinare un sottoinsieme di caratteri

Una domanda simile è stata già posta here.

+1

C'è un po 'più di 'fnmatch' di quanto menzionato in questa risposta. Vedi la risposta di tomka sotto http://docs.python.org/2/library/fnmatch.html – vinnyjames

0

Beh, non so se mi manca qualcosa, ma è possibile utilizzare qualsiasi modello che si desidera:

svn propset svn:ignore "*~" . 

È possibile controllare con:

svn propget svn:ignore . 

Un altro modo è quello di utilizzare un alias/script che possono eseguire analisi complesse durante il commit.

La soluzione migliore che ho trovato è quella di separare completamente l'albero versione dei file sorgente dall'albero di compilazione. In questo modo non generi cose nell'albero della tua versione di una directory. Quindi è possibile utilizzare solo svn:ignore per ignorare semplici artefatti generati da editor di testo, ad esempio.

EDIT:

dispiace il mio errore per la prima soluzione, ho letto male il tuo post. Gli altri due modi sembra rilevante, anche se non è esattamente ciò che si vuole ...

+0

Penso che la tua prima soluzione sia comunque a qualcosa. Potresti impostare svn: ignora un'espressione regolare che corrisponde a tutto tranne i file che terminano in ".xyz"? – jprete

+0

@jprete sfortunatamente non è consentita alcuna regex. la corrispondenza del modello si basa su fnmatch. – whaley

7

Questo è l'unica soluzione che conosco. È possibile aggiungere in modo esplicito i file anche se vengono ignorati.

Si avrebbe bisogno di aggiungere che l'impostazione su tutte le sottodirectory però.

# Create a repository with property ignore * 

[[email protected] ~] cd /tmp 
[[email protected] /tmp] svnadmin create foo 
[[email protected] /tmp] svn co file:///tmp/foo co 
Checked out revision 0. 
[[email protected] /tmp] cd co 
[[email protected] co] svn propset svn:ignore \* . 
property 'svn:ignore' set on '.' 

# Create 3 files 

[[email protected] co] touch a 
[[email protected] co] touch b 
[[email protected] co] touch c 

# We can add all 3 of these files in one transaction 

[[email protected] co] svn status 
M  . 
[[email protected] co] svn add a 
A   a 
[[email protected] co] svn add b 
A   b 
[[email protected] co] svn status 
M  . 
A  a 
A  b 
[[email protected] co] svn add c 
A   c 
[[email protected] co] svn ci 
Sending  . 
Adding   a 
Adding   b 
Adding   c 
Transmitting file data ... 
Committed revision 1. 
+1

Grazie per il suggerimento. Non mi sono reso conto che potresti aggiungere esplicitamente file come apparentemente "svn add' ignora svn: ignora. – whaley

+0

Per gli utenti di TortoiseSVN (1.8), si arrabbia se si tenta di aggiungere un file ignorato tramite la sua GUI, ma è possibile farlo tramite la riga di comando. – AlexMA

17

Dai un'occhiata alla http://www.thoughtspark.org/node/38. Ovviamente puoi usare "!" nei gruppi di caratteri per negarne il significato. Quindi se vuoi ignorare tutto tranne i file che terminano con.java, impostare il seguente schema per svn: ignore:

*[!j][!a][!v][!a] 
*.java?* 
+4

Ho chiesto a jcscoobyrs (chi gestisce il pacchetto svn su OSX) di farlo su IRC quel giorno che ha portato al suo post su thoughtspark.org . Lo riferimento in un commento alla risposta accettata. Basta dimostrare che, per quanto improbabile sia StackOverflow.com, non si può ancora battere parlando con un responsabile del progetto su IRC. – whaley

+0

Quello corretto sarebbe: * [! J] [! A] [! V] [! A] * j [! A] [! V] [! A] * ja [! V] [! A ] * jav [! A] – Nux

+0

Il collegamento è interrotto. – James

5

Questo è quello che ho impostato sulla cartella bin per svn:ignore proprietà in modo che corrisponda tutto, tranne i file apk:

*[!a][!p][!k] 
*a[!p][!k] 
*ap[!k] 

Se non ci sarebbe piena RegExp supporto è possibile utilizzare lookbehind negativo, ma raramente è implementato comunque (ad esempio non in JavaScript) ed è inefficiente.

4

I seguenti lavori per me e si sbarazzano di alcune stranezze degli altri suggerimenti.

*.? 
*.?? 
*.??? 
*.[!j]??? 
*.?[!a]?? 
*.??[!v]? 
*.???[!a] 
*.?????* 

Una riga per riga spiegazione segue:

  • ignorare tutto ciò che ha una sola lettera estensione
  • ignorare tutto ciò che ha due lettere estensione
  • ignorare tutto ciò che ha tre estensione lettera
  • ignorare tutto ciò che ha un'estensione di quattro lettere in cui la prima lettera dell'estensione non è j
  • ignorare tutto ciò che ha quattro lettere interno in cui la seconda lettera della estensione non è tutto
  • ignorare che ha quattro lettere estensione dove terza lettera della estensione non è v
  • ignorare tutto ciò che ha quattro lettere estensione dove quarta lettera della estensione non è un
  • ignorare tutto ciò che ha un bambino di cinque lettere estensione o più

Limitazioni:

  • Questo w mal bloccare anche le directory che finiscono su .java
  • Purtroppo non ero in grado di ignorare i file senza estensione, dal momento che avrebbe anche bloccare le directory.
Problemi correlati