Come si struttura in GIT il contenuto della repository?
Una directory .git ha una struttura simile alla seguente:
- objects/ folder
In questa directory, vengono archiviati i dati dei tuoi oggetti Git: tutto il contenuto dei file che hai mai registrato, i tuoi commit, gli alberi e gli oggetti tag.
-
- objects/[0-9a-f][0-9a-f] folders
Un oggetto appena creato viene archiviato nel proprio file. Gli oggetti vengono posizionati su 256 sottodirectory utilizzando i primi due caratteri del nome dell’oggetto SHA1 per mantenere il numero di voci della directory negli oggetti stessi su un numero gestibile. Gli oggetti trovati qui sono spesso chiamati oggetti sfusi o sfusi.
-
- objects/pack folder
I file che memorizzano molti oggetti in forma compressa, insieme ai file di indice per consentire loro di accedere in modo casuale, si trovano in questa directory.
-
- objects/info folder
Ulteriori informazioni sull’oggetto memorizzato si trovano in questa directory.
- refs folder
I riferimenti sono memorizzati in sottodirectory di questa directory. Il comando git prune sa preservare gli oggetti raggiungibili dai ref trovati in questa directory e nelle sue sottodirectory.
-
- refs/heads/ folder
Contiene oggetti commit.
-
- refs/tags/ folder
Contiene qualsiasi nome di oggetto.
-
- refs/remotes/ folder
Contiene oggetti commit di rami copiati da un repository remoto.
- packed-refs file
Il file è composto da intestazioni e tag compressi. È utile per un accesso efficiente al repository.
- HEAD file
Questo file contiene un riferimento al ramo in cui ci si trova attualmente. Questo dice a Git cosa usare come genitore del prossimo commit.
- config file
Questo è il file di configurazione principale di Git. Mantiene opzioni Git specifiche per il tuo progetto, come comandi, configurazioni push, rami di tracciamento e altro. La configurazione verrà caricata prima da questo file, quindi da un file ~/.gitconfigfile e quindi da un file/etc/gitconfig, se presenti.
- branches
Un vecchio modo per memorizzare le scorciatoie da utilizzare per specificare un URL per git fetch, git pull e git push. Questo meccanismo è un’eredità ed è probabile che non si trovi nei repository moderni.
- hooks folder
Questa directory contiene script di shell che vengono richiamati dopo i corrispondenti comandi Git. Ad esempio, dopo aver eseguito un commit, Git tenterà di eseguire lo script post-commit.
- index file
L’indice GIT viene utilizzato come area di gestione temporanea tra la directory di lavoro e il repository. Puoi utilizzare l’indice per creare una serie di modifiche che desideri impegnare insieme. Quando si crea un commit, ciò che è commit è ciò che è attualmente nell’indice, non ciò che si trova nella directory di lavoro. È un file binario contenente un elenco ordinato di nomi di percorso, ciascuno con autorizzazioni e SHA-1 di un oggetto blob.
- info folder
Ulteriori informazioni sul repository sono registrate in questa directory.
- remotes folder
Questa cartella contiene shorthands per URL e nomi di default predefiniti da utilizzare quando si interagisce con repository remoti tramite i comandi git fetch, git pull e git push. Questo meccanismo è un’eredità ed è probabile che non si trovi nei repository moderni.
- logs folder
Memorizza le modifiche apportate ai ref nel repository.
-
- logs/refs/heads/ folder
Registra tutte le modifiche apportate ai diversi suggerimenti di diramazione.
-
- logs/refs/tags/ folder
Registra tutte le modifiche apportate ai diversi tag.
- modules folder
Contiene i repository git dei sottomoduli.
- worktrees folder
Contiene dati amministrativi per alberi di lavoro collegati. Ogni sottodirectory contiene la parte relativa all’albero di lavoro di un albero di lavoro collegato.