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?
risposta
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
Modo, troppo accurato. Complimenti! –
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.
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
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. –
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. –