git hard links - sa che un file è un hard link?


16

Ho iniziato a utilizzare i collegamenti reali anziché i collegamenti simbolici per organizzare i file ...

Lo sto facendo per le foto che faccio per classificarle e per indicare quali voglio stampare, ecc.

Sto usando git per eseguire il backup delle mie immagini e sembra che git pensasse che fossero nuovi file mentre il repository cresceva di circa 1 GB. Git funziona davvero bene nel rilevare i nomi se non uso git per rinominare il file, ma gestisce anche i collegamenti reali?

Walter


2
Tutti i file normali sono collegamenti reali. Forse intendevi "file con più collegamenti fissi"?
Ignacio Vazquez-Abrams,

Sì, questo è ciò che intendevo.
Walter,

1
Correggimi se sbaglio, ma non mi dai più traccia content? Perché dovrebbe importare se i file hanno lo stesso contenuto, quindi - dopo tutto, sono tecnicamente lo stesso file.
nuovo123456,

1
Per le persone che si imbattono in questo - forse prendere in considerazione l'uso di collegamenti simbolici invece? stackoverflow.com/q/954560/492
Bloke CAD

Sembra che tu voglia un file system basato su tag.
Nayuki,

Risposte:


14

Moltiplicare i file tracciati collegati non farà crescere molto l'archivio oggetti di Git poiché ogni collegamento sarà rappresentato dallo stesso oggetto BLOB esatto. Il tuo albero di lavoro, tuttavia, potrebbe finire per crescere a causa di collegamenti interrotti.

Git non rileva se i file dell'albero di lavoro tracciati siano hard link allo stesso file.

Git lascerà i file dell'albero di lavoro collegati, tracciati e moltiplicati da soli se non gli viene chiesto di fare qualcosa che implichi la modifica del contenuto in quei percorsi o l'eliminazione delle voci della directory dei percorsi. Ma, se dovessi (ad esempio) fare il checkout di un vecchio commit o branch e poi tornare al tuo branch / commit normale e più recente, Git finirà per "spezzare" i collegamenti fisici (sostituendo i percorsi interessati con nuovi (ma identici) ) invece di ricreare la situazione con molti collegamenti).

Per recuperare il tuo stato moltiplicato, puoi scrivere un programma per cercare file identici e ricollegarli a uno qualsiasi dei file. Tale operazione di "ricollegamento" può essere più complicata se tutti i collegamenti non si trovano nell'albero di lavoro stesso o, almeno, non in una posizione "esterna" facilmente identificabile (ad esempio, sarà probabilmente difficile ripristinare i collegamenti se si sta effettuando il collegamento File "casuali" da tutta la directory home in un repository "backup" e usando Git per modificare l'albero di lavoro).

L'idea è nata nella mailing list di Git:


Per i Linux basati su debian, esiste lo strumento hardlink ( pacchetti.debian.org/search?keywords=hardlink ) che è in grado di eseguire questa operazione di ricollegamento. purtroppo non è molto veloce
Daniel Alder,

Corro hardlinkcome lavoro notturno /var/lib/jenkins.
Amedee Van Gasse,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.