simbolico permiten para link hard fuertes enlaces enlace duros duro directorios como carpeta borrar linux git hyperlink hardlink

permiten - ln linux



Git y enlaces duros (4)

De este problema de msysgit

Los puntos de unión no son enlaces simbólicos; por lo tanto, los enlaces simbólicos simplemente no están soportados en msysGit.

Además, los enlaces duros nunca fueron rastreados por Git .

El problema estaba orientado a Windows (ya que se trata de msysgit) y debatir sobre el posible soporte de symlink.
Pero el comentario sobre el enlace duro concierne a Git en general.

Teniendo en cuenta que Git no reconoce los enlaces simbólicos que apuntan fuera del repositorio, ¿hay algún problema al usar enlaces duros?

¿Podría Git romperlos? ¿Puede indicarme información detallada?


El objeto ''árbol'', que representa directorios en Git, almacena el nombre del archivo y (subconjunto de) permisos. No almacena el número de inodo (u otro tipo de identificación de archivo). Por lo tanto, los enlaces duros no se pueden representar en git , al menos no sin herramientas de terceros como metastore o git-cache-meta (y no estoy seguro de si es posible incluso con esas herramientas).

Git intenta no tocar los archivos que no necesita actualizar, pero debes tener en cuenta que git no intenta preservar los enlaces duros, por lo que pueden ser eliminados por git.

Acerca de los enlaces simbólicos que señalan el repositorio externo : git no tiene problemas con ellos y debe preservar los contenidos de los enlaces simbólicos ... pero la utilidad de dichos enlaces es dudosa para mí, ya sea si esos enlaces simbólicos se romperán o no depende del diseño del sistema de archivos fuera del repositorio de git y no bajo control de git.


Google ''git preserva los enlaces duros'' y muestra que git no sabe cómo preservar la estructura del enlace duro AFAIK, quizás por diseño.

Los proyectos web de la mina usan enlaces duros de la siguiente manera:

www/products/index.php www/products/dell_latitude_id577/index.php #(hard linked to above) www/products/dell_inspiron_id323/index.php #(hard linked again to above) me@server:www/products$ ls -l index.php -rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*

Si quería hacer cambios en index.php, lo cambio en un lugar y los enlaces duros (páginas de detalles del producto) apuntan a los cambios, excepto que git no conserva esta relación durante la clonación y extracción de otras computadoras.

me@server:www$ git pull

en otra máquina creará un nuevo index.php para cada enlace duro.


Ok, ahora esta es una respuesta tardía = D

Descubrí que, usando hooks, puedes capturar el evento git pull (cuando hay algo que extraer ...) escribiendo el manejador de eventos de script en el archivo .git/hooks/post-merge .

Primero, debes chmod +x it.

Luego, ln comandos ln para recrear enlaces duros en cada extracción. Neat eh!

Funciona, solo lo necesitaba para mi proyecto y ls -i muestra que los archivos se vincularon automáticamente después de la pull .

Mi ejemplo de .git/hooks/post-merge :

#!/bin/sh ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf

IMPORTANTE: Como puede ver, la ruta a cualquier archivo en su repositorio debe comenzar con $GIT_DIR , luego agregue la ruta relativa parcial al archivo.

También es importante: -f es necesario, porque está recreando el archivo de destino.