usuario usa una todos tabla siguientes qué propiedad permite permisos para numeros los dar cuál comandos comando carpeta cambiar archivos archivo mercurial file-permissions

mercurial - una - ¿cuál de los siguientes comandos se usa para cambiar la propiedad de un archivo?



¿Se puede hacer Mercurial para preservar los permisos de archivos? (4)

He visto una serie de publicaciones en el blog, y he experimentado por mí mismo, que Mercurial no conserva los permisos en los archivos enviados de un repositorio a otro. ¿Alguien sabe de una extensión de Mercurial que preservaría los permisos? Supongo que no se puede hacer con un gancho, porque ¿qué sabe un anzuelo sobre los permisos en el repositorio de origen?

Elaboración solicitada:

  • Si el único cambio en un archivo es un cambio en los permisos (por ejemplo, chmod o+r filename ), los intentos de confirmar el archivo fallan con un mensaje que dice que el archivo no ha cambiado.

  • Si confirmo un archivo con permisos 600 (rw -------), entonces clono el repositorio, el mismo archivo en el clon tiene permisos 664 (rw-rw-r--):

    : nr@yorkie 6522 ; hg clone one two updating working directory 1 files updated, 0 files merged, 0 files removed, 0 files unresolved : nr@yorkie 6523 ; ls -l one two one: total 4 -rw------- 1 nr nr 8 Aug 18 21:50 foo two: total 4 -rw-rw-r-- 1 nr nr 8 Aug 18 21:51 foo

Este ejemplo muestra que hg clone no conserva los permisos, pero hg push tampoco los conserva.

En mi aplicación, un repositorio está en una ruta públicamente accesible, y es de gran importancia que

  • Múltiples usuarios tienen derecho a cambiar el repositorio

  • Los archivos en el repositorio público se vuelven legibles solo cuando se pueden leer de forma explícita.


¿Qué pasa con el uso de esta solución de las preguntas frecuentes de Mercurial :

Si está utilizando Mercurial para la gestión de archivos de configuración, también puede realizar un seguimiento de las propiedades del archivo (propiedad y permisos). Mercurial solo rastrea el bit ejecutable de cada archivo.

Aquí hay un ejemplo de cómo guardar las propiedades junto con los archivos (funciona en Linux si tiene instalado el paquete acl ):

# cd /etc && getfacl -R . >/tmp/acl.$$ && mv /tmp/acl.$$ .acl # hg commit

Esto está lejos de ser perfecto, pero entiendes la idea. Para una solución más sofisticada, echa un vistazo a etckeeper.


No es buena idea almacenar permisos en VCS. Sin embargo, Mercurial admite la marca "ejecutable" (que no es lo mismo que los permisos, aunque en el marcador ejecutable de Unix es parte de los permisos).


Para el caso específico del directorio / etc, etckeeper parece interesante.


Parece que se puede hacer usando ganchos y una herramienta auxiliar (y un poco de goma de mascar y alambre para empacar):

  1. Obtenga el Metastore David Hardeman, que guarda y restaura metadatos de archivos.

  2. Altere las fuentes para que ignore el directorio .hg y .git .

  3. Use los siguientes ganchos Mercurial:

    precommit.meta = metastore -s changegroup.update = hg update update.meta = /usr/unsup/nr/bin/metastore -a

Tienes que agregar el archivo .metadata al repositorio.

Esta función funcionará la mayor parte del tiempo, pero si cambia solo permisos y desea propagarla, deberá ejecutar metastore -s para poder insertar esos cambios en el archivo .metadata donde hg verá el cambio; de lo contrario, el compromiso cree que nada es nuevo.