Full Stack

Cos'è una bare repository in Git?

Autore

Manuel Ricci

Arrivati a questo punto del corso avrete sicuramente guadagnato una notevole consapevolezza su Git e il suo ecosistema e avrete acquisito particolare familiarità con alcuni comandi.

Parlando di comandi, il primo in assoluto che abbiamo visto è stato git init il comando che ci permette di inizializzare una repository e di avere a disposizione tutto quello che abbiamo visto finora.

Più nello specifico, quello che creiamo con git init è una working repository dove, per l’appunto, possiamo lavorare ai nostri file e salvare le modifiche con git commit.

Se la nostra esigenza invece è quella di condividere e permette la condivisione del lavoro anche ad altri sviluppatori e non abbiamo alcun tipo di interesse nell’usare la repository come strumento di sviluppo, creazione delle branch o commit locali, allora in quel caso, quello di cui abbiamo bisogno è una bare repository.

Per creare una bare repository dobbiamo usare sempre git init, ma dobbiamo usare anche la flag --bare. Questo genere di repo ha tutte le capacità di una repository classica, con la sola, ma importantissima, eccezione che non può essere usata come working directory, perché non ce l’ha. Vediamo meglio cosa intendo.

Per creare una bare repository in Git bisogna quindi eseguire il seguente comando:

1git init --bare .

Qual è la differenza tra bare e non-bare repository

Le repository create con git init sono strutturate nel modo che sappiamo:

  • una .git directory con tutti i file e cartelle necessari a Git per poter mantenere la cronologia della nostra repo
  • una working directory dove i nostri file sono presenti nella loro versione più aggiornata (checkout).

Le repo create git init --bare sono chiamate bare repository. Sono strutturate in maniera differente. Per prima cosa non hanno working directory e seconda cosa non c’è la directory .git, ma quasi tutto il contenuto che abbiamo analizzato nella lezione dedicata alla .git directory è presente nella root directory. Inoltre, cosa che non succede con la normale inzializzazione, alle bare repository viene assegnata un’estensione .git.

A cosa serve una bare repository?

Una bare repository viene creata con lo scopo di condividere. Se collaborate con un team, servirà sicuramente uno spazio dove poter condividere i cambiamenti alla codebase. Quello spazio è una bare repository, solitamente collocata in un punto centralizzato alla quale tutti possono accedere e fare il push delle proprie modifiche (github vi dice niente?).

Siccome Git è un sistema di controllo di versione distribuito, nessuno modifica i file nella repository centralizzata condivisa. Invece, si clona la repo sul nostro sistema, si fanno le modifiche e quest’ultime vengono poi rimandate alla repo condivisa così che le modifiche siano rese disponibili anche agli altri sviluppatori.

Essendo quindi l’unico scopo delle bare repo la condivisione, un working tree risulta superfluo, dato che causerebbe conflitti ogni volta che un utente effettua un push del codice verso la repository. Questo quindi è il motivo per la quale le bare repository esistono e non hanno la necessità di avere un working tree.

Conclusioni

Per riassumere nuovamente il concetto, quando abbiamo la necessità di lavorare su dei file abbiamo bisogno di una repo classica, inizializzabile con il comando git init e potremmo quindi fare tutto quello che abbiamo visto finora sulla nostra macchina.

Quando saremo pronti a condividere le nostre modifiche presenti sulla nostra macchina avremo bisogno di una bare repository (solitamente vengono utilizzati servizi terzi come github, gitlab o bitbucket) così che altri membri del team possano accedere a quelle modifiche.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.