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 checkout
para 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-files
le permite inspeccionar su índice ( -s
impresiones stat
como 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/96f9db1b9610f238b78dd168ae33faa2dec15c
en 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 120000
cuenta que el modo aparece en la ls-files
salida. Sería algo así como 100644
para 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.symlinks
configuració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.symlinks
configuración.
De cualquier manera, los datos a los que hace referencia el enlace simbólico no se almacenan en el repositorio.
.gitignore
ve el enlace simbólico como un archivo, no como una carpeta.