Puede averiguar qué hace Git con un archivo al ver qué hace cuando lo agrega al índice. El índice es como una confirmación previa. Con el índice comprometido, puede usar git checkoutpara traer todo lo que estaba en el índice nuevamente al directorio de trabajo. Entonces, ¿qué hace Git cuando agrega un enlace simbólico al índice?
Para averiguarlo, primero, haga un enlace simbólico:
$ ln -s /path/referenced/by/symlink symlink
Git aún no conoce este archivo. git ls-filesle permite inspeccionar su índice ( -simpresiones statcomo salida):
$ git ls-files -s ./symlink
[nothing]
Ahora, agregue el contenido del enlace simbólico al almacén de objetos Git agregándolo al índice. Cuando agrega un archivo al índice, Git almacena su contenido en el almacén de objetos de Git.
$ git add ./symlink
Entonces, ¿qué se agregó?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
El hash es una referencia al objeto empaquetado que se creó en el almacén de objetos Git. Puede examinar este objeto si busca .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15cen la raíz de su repositorio. Este es el archivo que Git almacena en el repositorio, que luego puede consultar. Si examina este archivo, verá que es muy pequeño. No almacena el contenido del archivo vinculado.
(Tenga en 120000cuenta que el modo aparece en la ls-filessalida. Sería algo así como 100644para un archivo normal).
Pero, ¿qué hace Git con este objeto cuando lo revisa desde el repositorio y lo ingresa a su sistema de archivos? Depende de la core.symlinksconfiguración. De man git-config:
core.symlinks
Si es falso, los enlaces simbólicos se verifican como pequeños archivos sin formato que contienen el texto del enlace.
Entonces, con un enlace simbólico en el repositorio, al finalizar la compra, obtiene un archivo de texto con una referencia a una ruta completa del sistema de archivos, o un enlace simbólico adecuado, dependiendo del valor de la core.symlinksconfiguración.
De cualquier manera, los datos a los que hace referencia el enlace simbólico no se almacenan en el repositorio.
.gitignoreve el enlace simbólico como un archivo, no como una carpeta.