Pregunta

¿Alguien puede decirme por qué Mercurial muestra archivos ignorados para el comando 'HG Status'?

Aquí está la confirmación de que Mercurial está ignorando los archivos:

$ hg addremove
$ hg commit 
nothing changed     

Ahora, eche un vistazo a la salida de estado. Corrí esto inmediatamente después de las líneas de arriba. (Prinout es parcial, con texto identificable eliminado)

$ hg status
? Core/target/Core-0.0.1-SNAPSHOT-tests.jar
? Core/target/Core-0.0.1-SNAPSHOT.jar
? Core/target/classes/META-INF/MANIFEST.MF
? Core/target/classes/xxx/yyy/zzz/X.class
? Core/target/classes/xxx/yyy/zzz/XBackup.class
? Core/target/classes/xxx/yyy/zzz/XBackupInput.class
? Core/target/classes/xxx/yyy/zzz/XBackupOutput.class
? Core/target/classes/xxx/yyy/zzz/XImpl$GetResultsAndStatistics.class
? Core/target/classes/xxx/yyy/zzz/XImpl$MonitoringMode.class
? Core/target/classes/xxx/yyy/zzz/XImpl$UpdateMode.class
? Core/target/classes/xxx/yyy/zzz/XImpl.class
? Core/target/classes/xxx/yyy/zzz/XIsFullException.class
? Core/target/classes/xxx/yyy/zzz/XSource.class
? Core/target/classes/xxx/yyy/zzz/XUsageException.class
? Core/target/classes/xxx/yyy/zzz/CheckResults.class
? Core/target/classes/xxx/yyy/zzz/Noise.class
? Core/target/classes/xxx/yyy/zzz/core/DateTimeGenerator$TemporalMeasure.class
? Core/target/classes/xxx/yyy/zzz/core/DateTimeGenerator.class
? Core/target/classes/xxx/yyy/zzz/core/LoggingConfigurator.class
? Core/target/classes/xxx/yyy/zzz/core/ManagedIterator.class
? Core/target/classes/xxx/yyy/zzz/core/NetworkUtils.class
? Core/target/classes/xxx/yyy/zzz/core/StackTraceUtils.class
? Core/target/classes/xxx/yyy/zzz/core/Summarisable.class
? Core/target/classes/xxx/yyy/zzz/core/TimingUtils.class
? Core/target/classes/xxx/yyy/zzz/core/XMLStaticStringUtils.class
? Core/target/classes/xxx/yyy/zzz/core/Zipper.class
...

Hay algo así como mil líneas de estos archivos ignorados que se muestran en la impresión de estado; Esa es una GUFF seria.

¿Cómo puedo deshacerme de esto?

Gracias

ACTUALIZAR:

Aquí está mi archivo .hgignore.

syntax:glob
.metadata*

syntax:regexp
^target.*$
^[^/]*/target.*$
^[^/]*/[^/]*/target.*$
^bin.*$
^[^/]*/bin.*$
^[^/]*/[^/]*/bin.*$

ACTUALIZAR:

Modificado regexps un bit wee * ->. *

¿Fue útil?

Solución 4

Muchas gracias por la ayuda de todos en esto. No he encontrado una respuesta al problema, pero encontré una solución que se deshizo de él. Así que supongo que en algún momento al modificar el Hgignore Regexps Mercurial se confundió y corrompió sus datos internos ... o algo así. No sé lo suficiente para saber qué podría haber sido.

De todos modos, si te encuentres en el mismo barco, esto es lo que hice:

  1. Asegúrese de que su archivo .hgignore diga lo que desea y que todos los archivos que aparecen en el estado de HG son los que desea ignorar.
  2. Agregue todos los archivos para ser ignorados. HG Addremove no funciona porque honra el contenido de Hgignore, por lo que utilicé el complemento HG de Eclipse e hice cada archivo manualmente (bueno, los seleccioné a todos y Eclipse apliqué el agregado a todos individualmente).
  3. Revertir todos los archivos agregados. Usé lo siguiente porque estoy en Linux. (Gracias a otro póster en una pregunta separada aquí en So, que ahora ya no puedo encontrar desafortunadamente)

    Estado de HG -An0 | XARGS -0 HG Revertir

  4. Repita el paso anterior hasta que ya no funcione. ¡En mi caso, esto a veces era hasta 3 revertidos seguidos! (Sin embargo, no tengo idea de lo que realmente estaba haciendo :()

  5. comprometerse

Ya no debería ver los archivos ignorados en la salida de estado de HG.

Lo siento, no tengo idea de por qué funcionó esto o cuál era el problema original. Si alguien lo hace, estaría muy interesado en conocer sus pensamientos.

Muchas gracias de nuevo a todos :)

Otros consejos

Su sintaxis regexp es incorrecta. Tu tienes esto:

syntax:regexp
^target*$

lo que significa "ignorar cualquier cosa que comience con el objetivo y el final con Un asterisco

Que no ignora estos:

Core/target/classes/META-INF/MANIFEST.MF
Core/target/classes/xxx/yyy/zzz/X.class

Por dos razones: comienzan con Core/ no target Y no terminan con un asterisco.

Lo que probablemente quisiste decir fue esto:

syntax:regexp
^.*/target/.*$

que coincide con cualquier cosa que tenga /target/ en él (note que es .* en un regexp * es para estilo global). Sin embargo, el ^ y $ Solo sirva para rootear su regex y no lo desea rootearse; desea encontrarlo en cualquier lugar de la cadena, así que solo haga esto:

syntax:regexp
/target/

La pista en todo esto era que los archivos estaban marcados con ? lo que significa no ignorado y no agregado, si fueran ignorados, no los verías en absoluto sin agregar --ignored al comando de estado.

Obtuve un problema similar porque cambié el caso de letras para algunos archivos. Así que anteriormente obtuve un archivo llamado "Sitenav.ext", lo cambió a "Sitenav.ext" y comencé a tener el mismo tipo de problemas: cuando intenté "HG ST" I Got "? Sitenav.ext". Fix fue fácil cambiar el nombre de "_sitenav.ext", Addremove, Commit, cambiar el nombre de regreso a "Sitenav.ext", Addremove, Commit -> ¡Profit!

Como se comentó por Jeromo En la pregunta, proporcionar su configuración podría ayudarlo.

Una razón (ciertamente extraña) para su problema podría ser un problema de permiso con el .hgignore Archivo combinado con excluir valores predeterminados Para el addremove dominio.

Podría reproducir su situación revocando cualquier permiso de lectura del archivo Ignore y utilizando -X "**/target/**" Como una opción predeterminada para el addremove comando (que podría establecerse en cualquiera de los posibles archivos de configuración de Mercurial):

$ hg st
# no output, as expected
$ chmod 000 .hgignore
$ hg addremove # with '-X "**/target/**"' set as default somewhere
$ hg commit 
nothing changed  
$ hg st
? Core/target/Core-0.0.1-SNAPSHOT-tests.jar
? Core/target/Core-0.0.1-SNAPSHOT.jar
...

hg falla al leer el archivo ignorar y, por lo tanto, no sabe que el objetivo Las cosas deben ser ignoradas. Una advertencia correspondiente de hg Sería útil aquí.

Esta pregunta se ha actualizado en respuesta al comentario de Jerome.

? no significa ignorado.

Simplemente significa que Mercurial no está rastreando el archivo.

Si no quieres verlos, solo haz

estado de hg -mard

es decir, muestra solo modificado, agregado, eliminado, eliminado

Su archivo .hgignore dice que "^objetivo" se ignora, pero los archivos están en núcleo/objetivo. Entonces, la línea Ignore debería ser "objetivo" (sin el ^) o " ^núcle/objetivo".

¿O me falta Sth aquí?

(Nota: ^ implica que la coincidencia de regex comienza desde el comienzo del camino, es decir, solo caminos comenzando ¡Con Target sería igualado!)

Tuve el mismo problema y la respuesta de Bob me hizo el truco.

Si está utilizando TortoiseHG, puede seleccionar "Editar Filtro Ignorar" en el menú contextual (Windows) para verificar y cambiar su configuración .hgignore allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top