¿Cómo puedo hacer que git confirme archivos en una carpeta enlazada?

19

Tengo dos carpetas:

  • /home/me/code/project/
  • /srv/www/projectfiles/

En la /home/me/code/projectcarpeta, hice un enlace simbólico statica/srv/www/projectfiles/

es decir /home/me/code/project/static/->/srv/www/projectfiles/

Cuando trato de confirmar ahora, no ve ninguno de los archivos detrás del enlace simbólico, y en su lugar intenta confirmar el enlace simbólico como un archivo.

¿Cómo confirmo un archivo (p /srv/www/projectfiles/style.css. Ej. ) Que está detrás del enlace simbólico?

Macha
fuente

Respuestas:

12

Una solución alternativa sería tener / srv / www / projectfiles como un enlace simbólico a / home / me / code / project / static para que git no vea enlaces simbólicos

usuario151019
fuente
Entonces, ¿básicamente estás invirtiendo la lógica? Mantenga los archivos / carpetas requeridos en la carpeta Git y luego coloque un enlace simbólico en otro lugar (donde solían residir los archivos / carpetas originales).
RusI
@Rusl Sí, exactamente eso
usuario151019
Pero entonces, ¿cómo puedo hacer la personalización local de los archivos? ¿Debería tener un repositorio separado para cada máquina? Pierde todo el punto.
Ashnur
Bueno, la personalización local no estará en git
user151019
3

Si está utilizando Linux, me gusta especialmente la solución proporcionada por GitBLSR . Es una biblioteca que se carga a través de LD_PRELOAD que elimina de forma transparente los enlaces simbólicos a archivos y carpetas fuera de un repositorio.

Instalarlo para una cuenta de usuario local es simple:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

Esto compilará la biblioteca y creará un alias como el siguiente en ~/.bashrc:

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

El uso de este alias habilita la eliminación de referencias de enlaces transparentes.

marca
fuente
1
¡Eso es terrible! Pero funciona bien, así que es genial. ¡Gracias!
Kay está decepcionado en SE
¡Eso es raro! Me encanta
Marcos Besteiro López
2

Considere usar un punto de montaje para montar la carpeta de destino (en la que actualmente tiene un enlace simbólico) para que aparezca en la ubicación que desea debajo del proyecto git. He usado este enfoque con éxito.

Tony Garland
fuente
1

Mueva los archivos a la carpeta y elimine el enlace simbólico. Git no atraviesa enlaces simbólicos.

(Y yo) supondría que está haciendo un enlace simbólico a un conjunto de archivos que no controla o no desea modificar, por lo que no necesitan ser versionados.

Josh K
fuente
1
Yo sí controlo estos archivos. Son las hojas de estilo, etc., y deben estar en un directorio que servirá el servidor.
Macha
1

Otra solución alternativa, la única que encontré que también funciona para directorios, es cambiar el árbol de trabajo de git para las acciones específicas.

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
Ohad Cohen
fuente