2010-02-08 12 views
7

Cuando clono un repositorio de Mercurial, generalmente muestra los archivos como modificados cuando no lo han hecho. Esto puede suceder cuando hago los siguientes pasos;Mercurial que muestra archivos modificados incorrectamente

$ hg clone <url> 
$ cd project 
$ hg st 
.... large number of files with M at the start for modified 
$ hg diff 
.... no result. 

Creo que esto es debido a que los archivos han tenido sus permisos cambiados en el proceso así que parece que los archivos son diferentes desde hg realidad no hace un diff en cada archivo cuando se utiliza hg st. Sé que esto también puede pasar en git.

si realizo un hg commit entonces el problema desaparece pero significa que tengo que hacer un commit vacío y eso no es particularmente agradable.

He intentado hacer varias cosas como hg st --all para obtener más información y solo muestra que algunos archivos están modificados - no todos. No puedo ver un patrón.

Cuando estoy haciendo mi clonación hg ocurre en mi unidad de red que utilicé porque está respaldado. No estoy seguro de si esto podría ser lo que hace que cambien los permisos del archivo. Actualmente estoy ejecutando Ubunut 9.04.

¿Hay alguna manera de que pueda obtener hg st para que se corrija de algún modo?

El proyecto en cuestión (aunque ha sucedido con otros) es http://bitbucket.org/d0ugal/django-bursar/overview/ ya que estoy buscando algo de trabajo en él.

+0

Tengo este problema también, es muy molesto y me hace sentir que Mercurial no es confiable. – Webnet

Respuesta

0

Al final resultó que hacer:

$ hg diff --git 

... muestra que los permisos de archivo de hecho habían cambiado de 644 a 755.

me gusta especialmente la solución, pero yo era capaz de Resuélvelo ejecutando esto (en el servidor que aloja el código, no en mi máquina local).

find . -type f -print | xargs chmod 644 

Luego dos archivos mostraron que habían cambiado de 755 a 644 (así que los actualicé individualmente). Afortunadamente, fue bastante fácil en este caso, pero un proyecto con permisos de archivos más diversos podría ser un problema.

Creo que el problema podría ser con la forma en que mi servidor está compartiendo el disco, tendré que buscarlo en otro punto, pero esto sirve para el interino. Debe ser algo relacionado con la forma en que los archivos se guardan en la máquina remota? Creo que la próxima vez intentaré hacer el clon de git en el servidor y el trabajo en el proyecto a nivel local.

Como nota al margen, hay un punto sobre este comportamiento en las preguntas frecuentes de git. http://git.wiki.kernel.org/index.php/GitFaq#Why_does_git_diff_sometimes_list_a_file_that_has_no_changes.3F - no pude encontrar nada para mercurial sin embargo.

+0

En otro proyecto, cloné el repositorio en mi servidor, donde está alojado el código, y se desprotegió correctamente con los permisos adecuados. Parece que en algún lugar entre retirar y copiar en una unidad de red los permisos se cambiaron. –

+3

¿No debería ser 'hg diff --git' en lugar de' hg st - git'? –

+0

Sí, buen lugar. –

5

Si son los permisos que han cambiado, puede ver esas diferencias usando hg diff --git. Sin embargo, no estoy seguro de por qué los permisos estarían cambiando en el momento del pago.

+0

Gracias - Acabo de descubrirlo gracias a un poco de ayuda en IRC. Publiqué una respuesta sobre cómo resolví el problema al final, ¡no es lo ideal, pero puedo volver a trabajar ahora! –

Cuestiones relacionadas