2010-12-29 8 views
9

Si agrego un nuevo archivo en la raíz de mi proyecto, aparece con un estado ? en hg st, y se agrega con hg add.¿Cómo obtener mercurial para notar archivos agregados en subdirectorios? (hg st, hg add)

Sin embargo, si agrego un nuevo archivo en un subdirectorio, no aparece en hg st, y solo se agrega si agrego explícitamente el archivo (ni siquiera si agrego el directorio que contiene el archivo).

¿Cómo puedo obtener mercurial para ver los archivos en los subdirectorios, de forma similar a como subversion los nota?

Gracias

+0

¿Esto sucede para cualquier subdirectorio (es decir, independientemente de su nombre) o solo para los específicos? –

+0

Por favor, publique un ejemplo específico que ilustre el problema, comenzando con un 'hg init' como el ejemplo en mi respuesta/adivinar. –

+0

¿'hg status --all' le da una lista para el archivo? – Matt

Respuesta

14

Bueno, simple hg add sin argumentos adicionales agrega archivos en subdirectorios, así, que básicamente agrega todos los archivos con el estado desconocido para ser rastreados.

Sin embargo, si especifica una máscara simple, solo funciona en su directorio de trabajo actual (es decir, el directorio de trabajo del comando hg, no el directorio de trabajo asociado al repositorio), por lo que si se encuentra actualmente en el subdirectorio, agregará esos archivos, si está en el directorio raíz, agregará esos archivos en su lugar.

En otras palabras, esto:

hg add test* 

Sólo funciona con archivos en el directorio que está actualmente situado.

Puede anular ese comportamiento mediante la especificación de una máscara que dice hg para operar en subdirectorios:

hg add **/test* 

Esto dice "añadir todos los archivos que coinciden con 'prueba *' en el directorio actual y todos los sub- directorios.

Si se quita uno de los asteriscos, que funcionan sólo en subdirectorios del directorio de trabajo actual.

sería de gran ayuda si usted envió lo que los comandos específicos que ejecutó, y la salida, en su caso, y la salida de hg st antes y después.

+1

No estoy aplicando ninguna máscara. Solo agrego un archivo en un subdirectorio y hago un 'hg st', y no veo salida (ni siquiera un estado'? 'Desconocido para el archivo). Si hago lo mismo en el directorio raíz, veo el archivo con un estado desconocido. Vale la pena mencionar que el subdirector no se ignora en .hgignore –

+0

¿Cuál es el nombre del directorio, y cuál es el nombre del archivo, y puede publicar su archivo .hgignore, por si acaso? –

+0

Ah, y compruebe la respuesta de @Mark Tolonen aquí también, es posible que ese sea su problema. –

3

¿Usted hg init en el subdirectorio también? Si es así, no. A continuación ilustra el problema:

C:\>hg init project 
C:\>cd project 
C:\project>hg init sub 
C:\project>echo >file1 
C:\project>echo >sub\file2 
C:\project>hg st 
? file1 

borrar el directorio de la subcarpeta .hg para solucionarlo:

C:\project>rd /s/q sub\.hg 
C:\project>hg st 
? file1 
? sub\file2 

A diferencia de Subversion, Mercurial sólo se utiliza un directorio .hg en la raíz de un proyecto.

+0

Gracias Mark pero no, no he 'hg init' en ningún subdirectorio, y no hay directorios' .hg' más que en mi raíz. ¿Alguna otra idea? –

+0

La única idea es publicar un ejemplo completo de los comandos previos al problema. ¿Tienes un .hgignore en absoluto? Tal vez algo coincida accidentalmente. ¿Qué sucede si, en un nuevo directorio, 'hg init', crea un archivo, crea un subdirectorio, crea un archivo en el subdirectorio y' hg status'? Eso debería mostrar ambos archivos. –

Cuestiones relacionadas