2010-03-07 19 views
12

Odio ver casi cada directorio en mi lista de repositorio cada archivo dos veces, una vez con un punto delante y otra vez sin ella. Traté de agregar .* a mi archivo .hgignore, pero no tiene ningún efecto. ¿Es esta la sintaxis incorrecta, y más importante, es una mala idea intentar esto en primer lugar? Gracias.¿Cómo hacer que mercurial ignore todos los archivos ocultos?

+0

La sintaxis sería algo más parecido a '\ .. * 'pero es muy sospechoso que usted describe que tiene todos los archivos, con un punto y por fuera. Normalmente no tendrías archivos de puntos en un repositorio. ¿Qué archivos estás rastreando? ('hg manifest') – gavinb

+0

Esto desafortunadamente todavía no funcionó. Estaba exagerando un poco cuando dije que hay archivos de puntos en todas partes, pero en varios directorios cada archivo tiene un archivo de puntos equivalente. Edité .hgignore con su sintaxis, realicé 'hg addremove', e hice una confirmación, y todos siguen en mi repositorio. –

+1

La sintaxis depende de si está utilizando sintaxis glob o re (por ejemplo, una línea del formulario 'sintaxis: re' encima de la directiva). Pero '. *' Es la sintaxis correcta de glob. Si los archivos ya están comprometidos, tendrá que eliminarlos individualmente (o con 'hg rm. *'), Y addremove no hará esto por usted. –

Respuesta

17

Tienes casi la respuesta correcta en los comentarios de gavinb, pero el partido fue un poco de ancho. Sin embargo, el concepto clave sobre ignorar después de la cara lo proporcionó RogerPage, de nuevo en un comentario (¿qué pasa con que todos prefieran los comentarios a las respuestas?). mirada

Vamos a estos nueve archivos:

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 

Si en el modo de expresión regular predeterminada para hgignore haces:

\..* 

te ignoran ocho de los nueve archivos:

$ 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 

que es más amplio de lo que dijiste que querías. Está ignorando cualquier cosa con un punto en cualquier parte en él.

ignorar todos archivos y Directores (no lo que ha dicho, pero lo que parece que quieren) que comienza con un punto se utiliza este patrón de expresión regular:

(^|/)\. 

que dice que la cosa antes de que el literal punto tiene que ser el comienzo de la línea (^) o una barra inclinada.

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

que llamó sólo los archivos o directorios que empiezan por un punto.

Sin embargo, el otro concepto clave que se le ocurrió, fue que .hgignore no tiene ningún efecto después de que un archivo ha sido añadido. Evitará agregar comodines, pero siempre puede anular .hgignore con un hg add explícito. y una vez que se han agregado los archivos, hgignore ya no se consulta.

Eso es realmente útil porque puede ignorar ampliamente (por ejemplo, .*\.jar) y luego agregar las excepciones que desea manualmente sin tener que usar su archivo hgignore. Sin embargo, en este caso significa que necesita hg rm los archivos que ya ha agregado accidentalmente, y tonfa mostró cómo hacerlo (siempre que no haya espacios en sus nombres de archivo).

Al final suena como lo que quiere en su archivo .hgignore es:

(^|/)\._ 

y que tiene que quitar los que ya haya añadido:

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

Muy, muy minucioso. ¡Prestigio! –

0

utilizo esto en mi .hgignore:

syntax: regexp 

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

que dice: períodos no precedidos por algo más que af orward slash.

solución de Ry4an también es bueno, que he usado antes de que uno también. No estoy seguro de cuál es más eficiente.

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

Cuestiones relacionadas