significado nike english mercurial

mercurial - nike - ¿Por qué "hg status" muestra los archivos cambiados cuando "hg diff-g" no?(Un padre)



mercurial svn (5)

Acabo de eliminar los archivos que aparecieron como modificados (hacer una copia de seguridad si es necesario) lo que causó que todos los archivos se mostraran con un! al lado cuando corri

hg st

Después de eso, ejecuté el siguiente comando para revertir los archivos (que ya estaban registrados):

hg revert --all --no-backup

y eso soluciono el problema

Tengo un repositorio donde:

> hg st

muestra que mi directorio de trabajo tiene algunos cambios no confirmados,

> hg diff > hg diff -g > hg diff --git

no mostrar nada

Leo aquí: 4.10. El estado de hg muestra los archivos modificados, pero hg diff no lo hace. el seguimiento:

El estado de hg informa cuando el contenido del archivo o las marcas han cambiado en relación con cualquiera de los padres. hg diff solo informa cambios en el contenido relativo al primer elemento primario. Puede ver la información de la bandera con la opción --git para hg diff y deltas en relación con el otro padre con -r.

Sin embargo, si ejecuto hg parents muestra solo un padre (la sugerencia). Como mencioné anteriormente, también probé hg diff --git y aún no muestra nada.

Nota:

  • Lo anterior está en la versión 2.0.1 de Mercurial.
  • hg status solo muestra M junto a un archivo normal.
  • hg diff y hg diff -g no imprimen nada
  • El sistema de archivos es NFS.
  • hg parents imprime solo un padre

Algunos extractos de Mercurial en uso diario (Mercurial: la guía definitiva) (copiando aquí porque parece que no hay manera de proporcionar un enlace conveniente al final de la página):

La salida predeterminada del comando hg diff es compatible hacia atrás con el comando diff estándar, pero esto tiene algunos inconvenientes.

La salida de hg diff anterior oculta el hecho de que simplemente cambiamos el nombre de un archivo . El comando hg diff acepta una opción, --git o -g , para usar un formato diff más nuevo que muestre dicha información en una forma más legible.

Esta opción también ayuda con un caso que de otra manera podría ser confuso: un archivo que parece ser modificado según el hg status , pero para el cual hg diff no imprime nada. Esta situación puede surgir si cambiamos los permisos de ejecución del archivo .

El comando diff estándar no presta atención a los permisos de archivos, por lo que hg diff no imprime nada de forma predeterminada. Si lo suministramos con la opción -g , nos dice lo que realmente sucedió.

Para resumir, el comando hg diff omite varios tipos de información sobre cambios: atributos, permisos, nombres de archivos, etc. Estos cambios pueden existir incluso si tiene un único padre. Y el hg status correctamente tiene en cuenta todos los cambios. Para ver lo que ha sucedido, use hg diff -g . Es la respuesta a la pregunta ''qué pasa''.

Parece que la compatibilidad hacia atrás es el ''por qué''. No estoy seguro, pero supongo que la ''diferencia normal'' es una herramienta Unix / Linux extendida o incorporada (a juzgar por el hecho de que tanto hg como git provienen de ese mundo).


En estas situaciones (le pasa mucho a mi equipo), encuentro que este comando solucionará cualquier cosa:

hg debugrebuilddirstate

o

hg debugrebuilddirstate -r tip

Está ligeramente documentado en la documentación de ayuda , pero básicamente creo que borra el archivo "dirstate" que almacena información sobre los archivos del directorio de trabajo. La próxima vez que hg stat se actualizará desde cero.

Una advertencia: si ha agregado o eliminado archivos, esa información se perderá cuando se reconstruya el dirstate .


En mi caso algo se rompió con hg. (los mismos permisos y hg diff -g no muestra nada). Solucioné el problema con la siguiente manera:

  1. Volví a clonar el repositorio en una carpeta separada
  2. Eliminé todo de esta carpeta, excepto .hg
  3. Me mudé de un lugar antiguo (roto) todo, excepto .hg a un lugar nuevo

Así que después de este paso tengo un repositorio que clonado con la versión actual de mercurial + exactamente los mismos archivos.

Después de estos pasos, recibí los mismos resultados (vacíos) para los comandos: hg st y hg diff -g


Si tiene ignorews o ignoreblanklines establecidos en .hgrc entonces hg status lo mostrará como cambiado, pero hg diff no lo hará (asumiendo que los cambios son solo espacios en blanco).