Puoi scoprire cosa fa Git con un file vedendo cosa fa quando lo aggiungi all'indice. L'indice è come un pre-commit. Con l'indice impegnato, è possibile utilizzare git checkout
per riportare tutto ciò che era nell'indice nella directory di lavoro. Quindi, cosa fa Git quando si aggiunge un collegamento simbolico all'indice?
Per scoprire, innanzitutto, crea un link simbolico:
$ ln -s /path/referenced/by/symlink symlink
Git non è ancora a conoscenza di questo file. git ls-files
ti consente di ispezionare il tuo indice ( -s
stampe stat
simili a output):
$ git ls-files -s ./symlink
[nothing]
Ora, aggiungi il contenuto del link simbolico all'archivio oggetti Git aggiungendolo all'indice. Quando aggiungi un file all'indice, Git archivia il suo contenuto nell'archivio oggetti Git.
$ git add ./symlink
Quindi, cosa è stato aggiunto?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
L'hash è un riferimento all'oggetto compresso creato nell'archivio oggetti Git. Puoi esaminare questo oggetto se cerchi nella .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
radice del tuo repository. Questo è il file che Git archivia nel repository, che puoi successivamente verificare. Se esamini questo file, vedrai che è molto piccolo. Non memorizza il contenuto del file collegato.
(Nota 120000
è la modalità elencata ls-files
nell'output. Sarebbe qualcosa di simile 100644
a un file normale.)
Ma cosa fa Git con questo oggetto quando lo si estrae dal repository e nel proprio filesystem? Dipende dalla core.symlinks
configurazione. Da man git-config
:
core.symlinks
Se falso, i collegamenti simbolici vengono estratti come piccoli file semplici che contengono il testo del collegamento.
Quindi, con un collegamento simbolico nel repository, al momento del pagamento si ottiene un file di testo con un riferimento a un percorso completo del file system o un collegamento simbolico appropriato, a seconda del valore della core.symlinks
configurazione.
In entrambi i casi, i dati a cui fa riferimento il collegamento simbolico non vengono archiviati nel repository.
.gitignore
vede il collegamento simbolico come un file e non una cartella.