2010-03-07 9 views
12

Odio vedere quasi ogni directory nel mio archivio elencare ogni file due volte, una volta con un punto di fronte e una volta senza. Ho provato ad aggiungere .* al mio file .hgignore, ma non ha alcun effetto. È la sintassi sbagliata e, cosa più importante, è una cattiva idea provare questo in primo luogo? Grazie.Come rendere mercuriale ignorare tutti i file nascosti?

+0

La sintassi sarebbe qualcosa di più simile a '\ .. *' ma è molto sospetto che descrivi avere tutti i file, con un punto e senza. Normalmente non si hanno file dot in un repository. Quali file stai rintracciando? ('hg manifest') – gavinb

+0

Questo purtroppo non ha funzionato. Stavo esagerando un po 'quando ho detto che ci sono file di punti ovunque, ma in diverse directory ogni file ha un equivalente di file di punti. Ho modificato .hgignore con la tua sintassi, eseguito 'hg addremove', e ho fatto un commit, e sono tutti ancora nel mio repository. –

+1

La sintassi dipende dal fatto che si stia utilizzando glob o re sintassi (ad esempio una riga della sintassi 'form: re' sopra la direttiva). Ma '. *' È la sintassi glob corretta. Se i file sono già impegnati, dovrai rimuoverli individualmente (o con 'hg rm. *'), E addremove non lo farà per te. –

risposta

17

Hai quasi la risposta giusta nei commenti di gavinb, ma la corrispondenza è stata un po 'troppo ampia. Tuttavia, il concetto chiave sull'ignorare dopo la faccia è stato fornito da RogerPage, sempre in un commento (che cosa preferiscono tutti i commenti alle risposte?). sguardo

Let a questi nove file:

dir.with.dots/file.with.dots 
dir.with.dots/filewithoutdots 
dir.with.dots/.filestartwithdot 
dirwithoutdots/file.with.dots 
dirwithoutdots/filewithoutdots 
dirwithoutdots/.filestartwithdot 
.startwithdot/file.with.dots 
.startwithdot/filewithoutdots 
.startwithdot/.filestartwithdot 

Se in modalità predefinita regex per hgignore che fate:

\..* 

si ignora otto di questi nove file:

$ hg stat -i 
I .hgignore 
I .startwithdot/.filestartwithdot 
I .startwithdot/file.with.dots 
I .startwithdot/filewithoutdots 
I dir.with.dots/.filestartwithdot 
I dir.with.dots/file.with.dots 
I dir.with.dots/filewithoutdots 
I dirwithoutdots/.filestartwithdot 
I dirwithoutdots/file.with.dots 

che è più ampio di quello che hai detto che volevi. Sta ignorando qualsiasi cosa con un punto ovunque nello stesso.

di ignorare tutti file e directores (non quello che hai detto, ma quello che sembrano voler) iniziano con un punto si utilizza questo modello regexp:

(^|/)\. 

che dice che la cosa prima che il letterale punto deve essere l'inizio della riga (^) o una barra.

$ hg stat -i 
I .hgignore 
I .startwithdot/.filestartwithdot 
I .startwithdot/file.with.dots 
I .startwithdot/filewithoutdots 
I dir.with.dots/.filestartwithdot 
I dirwithoutdots/.filestartwithdot 

Questo ha catturato solo i file o le directory che iniziano con un punto.

Tuttavia, l'altro concetto chiave che è emerso è che .hgignore non ha alcun effetto dopo l'aggiunta di un file. Impedirà l'aggiunta per carattere jolly, ma puoi sempre ignorare .hgignore con un esplicito hg add. e una volta che i file sono stati aggiunti, l'hgignore non viene più consultato.

Questo è davvero molto utile in quanto è possibile ignorare ampiamente (ad esempio: .*\.jar) e quindi aggiungere le eccezioni che si desidera manualmente senza dover utilizzare il file hgignore. Tuttavia, in questo caso significa che è necessario hg rm i file che hai già aggiunto accidentalmente, e tonfa ha mostrato come farlo (a patto che non ci siano spazi nei tuoi nomi di file).

Alla fine suona come quello che vuoi nel tuo file .hgignore è:

(^|/)\._ 

e che è necessario rimuovere quelli che hai già aggiunto:

find . -type f -name "._*" -print0 |xargs -0 hg rm 
+0

Modo, troppo accurato. Complimenti! –

0

io uso questo nel mio .hgignore:

syntax: regexp 

# dotfiles 
(?<![^/])\. 

che recita: i periodi non preceduti da qualcosa di diverso af barra laterale.

Anche la soluzione di Ry4an è buona, l'ho già usata prima. Non sono sicuro quale sia più efficiente.

https://regex101.com/r/dB4bW7/1