Un'introduzione a Git

Pubblicato: 2022-06-30

Non importa se stai costruendo un sito Web nuovo di zecca, sviluppando un tema o un plug-in o impostando strategie avanzate di integrazione e distribuzione continua, lavorerai con il codice.

Sotto ogni sito Web viene eseguito del codice, sia che tu stia utilizzando WordPress, WooCommerce, Drupal, Magento, NextJS o persino HTML codificato a mano. Ci sono set di file necessari per rendere ogni pagina e visualizzare il contenuto al mondo.

Quello che scoprirai rapidamente è che hai bisogno di un modo per tenere traccia delle modifiche al codice nel tempo. È necessario sapere quali modifiche sono presenti nella versione più recente di qualsiasi file e chi ha apportato ciascuna modifica.

È qui che entra in gioco Git. Continua a leggere per conoscere Git, lavorare con repository Git remoti e altro ancora.

Capire Git

Git è un sistema di controllo della versione che consente agli sviluppatori e a chiunque lavori con i file di creare e archiviare facilmente versioni delle modifiche, visualizzare una cronologia di tali modifiche e condividere tali modifiche tra dispositivi e sistemi, il tutto fornendo un modo per annullare tali modifiche nel caso qualcosa vada storto.

Una breve storia

Nel lontano 2005, un team di sviluppatori stava creando un progetto chiamato Linux, il sistema operativo gratuito e open source. Avevano bisogno di un modo per comunicare facilmente i cambiamenti tra centinaia di contributori. In origine, passavano le singole patch che contenevano il codice aggiornato, ma questo si è rivelato problematico su molti fronti, specialmente quando si determinava quale fosse la versione "vera" e l'ultima di qualsiasi particolare insieme di modifiche.

Frustrato da questi problemi, il progetto Linux ha portato Linus Torvald a implementare un'idea piuttosto nuova per un progetto per condividere l'intera base di codice tra gli sviluppatori e prendere "istantanee" delle loro modifiche, chiamate commit, che potrebbero essere condivise e unite con qualsiasi altra copia di il codice, in qualsiasi parte del mondo. Immediatamente questo ha aiutato con la comunicazione, poiché tutte le modifiche al progetto potevano essere viste come un'unica cronologia.

Quel metodo per catturare queste istantanee è Git, che ha rapidamente preso vita propria e da allora è stato sviluppato indipendentemente dal progetto Linux.

Un grafico dei cambiamenti

Concettualmente, puoi pensare a Git come a un grafico di nodi, in cui ogni nodo è un'istantanea dell'intero progetto in un determinato momento. Il libro Git, su git-scm.com, delinea la struttura di un'istantanea.

Git archivia i dati come istantanee del progetto nel tempo

Questa catena di istantanee crea un grafico nel tempo, con la versione più recente in primo piano o all'inizio della cronologia delle modifiche. Ogni snapshot è indicato come "commit" in Git.

Ecco una rapida occhiata all'aspetto di un progetto Git se metti la modifica più recente nella parte superiore del grafico. Nota: questo esempio utilizza la GUI GitKraken Git per visualizzare il grafico.

Esempio di grafico git

Costruire il grafico Git

Git crea questo grafico delle modifiche, noto anche come cronologia di Git, attraverso un processo di commit delle modifiche. Prima di poter eseguire il commit delle modifiche, tuttavia, dovrai dire in modo specifico a Git cosa vuoi aggiungere a quello snapshot, o eseguire il commit come viene indicato correttamente in Git.

Quando lavori in locale, tutte le modifiche che stai salvando nel tuo progetto si trovano nella tua "Directory di lavoro". Git può vedere tali modifiche, ma non sa ancora quali modifiche vuoi eseguire il commit. Dovrai dire esplicitamente a Git quali modifiche vuoi eseguire usando un comando chiamato "git add" per aggiungere quei file specifici all'"area di staging" di Git.

Dopo aver apportato le modifiche al file che desideri vincolare al grafico degli snapshot del progetto, puoi utilizzare il comando "Git commit" per creare permanentemente lo snapshot sul grafico.

I passaggi di aggiunta e commit di Git

Tornando indietro nel tempo

Uno dei vantaggi di Git e di avere a disposizione l'intera cronologia del progetto è che puoi tornare indietro e annullare tutte le modifiche in qualsiasi momento.

Se l'ultimo commit che hai fatto interrompe qualcosa, o cambi idea su ciò che hai fatto, puoi fare un "ritorno Git" per ripristinare il commit Git. Questo crea un nuovo commit sul grafico che annulla semplicemente le modifiche appena apportate.

Se vuoi tornare indietro nel tempo e far sembrare che non hai mai effettuato un commit, puoi usare "Git reset" per farlo.

Il potere della ramificazione e della fusione in Git

Una delle funzionalità più potenti che Git ci offre è la capacità di creare realtà alternative parallele. No davvero.

Dato che stai creando un grafico dei commit nel tempo, puoi scegliere di creare linee parallele di commit, chiamate branch, da qualsiasi punto della cronologia. Un ramo Git appena creato è indipendente dalla cronologia principale, il che significa che sei libero di apportare tutte le modifiche che desideri e non influirà sul tuo altro lavoro. Anche la sequenza temporale principale è un ramo ed è più comunemente chiamato ramo "principale" o "principale". Le nuove filiali e filiali diverse da quelle principali sono comunemente denominate "filiali di funzionalità".

Dopo aver apportato le modifiche al tuo ramo di funzionalità, puoi applicare tutte le modifiche al ramo principale eseguendo un'unione Git.

C'è un grande vantaggio nel lavorare in questo modo. Un ramo di funzionalità isola le modifiche al codice, quindi se introduci errori, puoi essere certo che il ramo principale è sicuro. Lavorare nelle filiali libera anche il ramo principale nel caso in cui sia necessario applicare un aggiornamento o una correzione di sicurezza senza interrompere il lavoro di sviluppo in corso.

L'unione di Git ti consente anche di trasferire le modifiche dal ramo principale a un ramo di funzionalità. Ciò ti dà la possibilità di assicurarti che gli aggiornamenti apportati al ramo principale funzionino ancora con le modifiche proposte prima di tentare di unirli con "principale".

Se stai lavorando con un team, una strategia di ramificazione Git può garantire che il tuo team possa testare a fondo le modifiche prima che arrivino alla produzione e fornire un modo semplice per gestire il processo.

Lavorare con repository remoti in Git

Uno degli obiettivi principali di Git è semplificare la condivisione del codice con persone in tutto il mondo. Integrato in Git è la nozione di repository remoto.

Un repository Git è l'intera cartella del progetto in cui memorizzi il tuo lavoro ed è ciò che Git tiene traccia nel tempo. Ogni repository può essere clonato utilizzando il comando Git clone e condiviso un numero illimitato di volte, rendendo Git molto scalabile.

Un altro aspetto che rende Git molto scalabile è che se modifichi un documento, non è necessario archiviare una copia completamente nuova di quel documento. Le modifiche vengono archiviate come piccoli pacchetti di informazioni denominati "delta" e solo le righe modificate individualmente di un file e un po' di dati sulla modifica sono ciò che Git deve archiviare o condividere. I delta sono molto leggeri, spesso solo pochi byte di dimensioni. Ad esempio, se modifichi una singola riga in un documento da 100 KB, il delta sarà solo di 20 byte circa.

Per mantenere tutto in linea e coerente su tutte le copie di un repository, devi semplicemente designare quale copia, situata su quale computer, è la copia "vera" del progetto, e quindi assicurarti che i tuoi commit arrivino a quella copia.

Questo funziona anche nell'altro modo. Quando collabori con altri, puoi inserire le loro modifiche nella tua copia locale del repository per assicurarti che la tua copia locale del progetto sia aggiornata.

Il modello git di lavorare con repository remoti

Esistono numerose aziende che rendono estremamente semplice e gestibile la collaborazione su repository remoti. Piattaforme come GitHub, GitLab e BitBucket offrono hosting di repository Git online e strumenti di collaborazione. Esistono molti milioni di repository Git online gestiti da milioni di sviluppatori e Git tiene traccia di ogni singola fonte di verità, indipendentemente dal numero di persone che collaborano.

Cosa non archiviare in Git

Parliamo di cosa probabilmente non dovresti fare con Git. Sebbene Git sia straordinario nel condividere il codice e nel tenere traccia delle modifiche nel tempo, ci sono alcuni lavori che non sono adatti al modello. Fortunatamente, Git ci offre un modo pratico per dirgli di ignorare le cose, chiamato file ".gitignore".

Se è presente un file ".gitiginore", Git lo verificherà per vedere se dovrebbe guardare quegli elementi. All'interno di un ".gitiginore" puoi elencare singoli nomi di file, intere directory o interi tipi di file. Ad esempio, se desideri escludere tutti i file .png e .jpg e l'intera cartella "wp-content/uploads", nei tuoi file ".gitiginore" dovresti semplicemente scrivere:

 *.png *.jpg wp-content/uploads

Perché escludere i file multimediali da Git?

Git archivia le istantanee di un progetto e passa solo i "delta". Ma se il file in questione è un "blob" di dati, come un'immagine, un video o qualsiasi altro file binario, ogni alterazione del file creerà un nuovo blob di dati. Git deve quindi ricordare lo stato sia del vecchio BLOB che del nuovo BLOB, aggiungendo molte dimensioni non necessarie al repository. Questo si accumula nel tempo e i repository diventano presto ingombranti man mano che perdi i vantaggi della leggerezza di Git.

Che tu ci creda o no, potresti non voler tenere traccia delle modifiche nel core di WordPress stesso. Ci sono un paio di ragioni per questo.

Innanzitutto, c'è un vecchio detto con qualsiasi CMS: "Non hackerare il core!" Non dovrebbe esserci nulla che stai cambiando nel nucleo di WordPress che dovrà essere monitorato. Eventuali aggiornamenti dovranno provenire da WordPress stesso e se si desidera una versione precedente, è facilmente specificabile al momento dell'installazione. Puoi assolutamente archiviare un'intera installazione di WordPress in Git, ma non ha molto valore nel farlo in determinate situazioni. Vuoi davvero solo tenere traccia delle modifiche al codice che stai manipolando, come i tuoi plugin personalizzati e temi figlio. È davvero una buona idea chiedere consiglio al tuo provider di hosting su questo argomento.

In secondo luogo, se prevedi di contribuire a WordPress, scoprirai che in realtà è mantenuto tramite un vecchio sistema di controllo della versione chiamato SVN. Questo modello richiede un'infrastruttura server centrale ed è molto meno popolare rispetto a Git, ma anche in questo caso WordPress è più vecchio di Git. Lavorare con il sistema di patching SVN è leggermente diverso e dovresti consultare la loro documentazione per ulteriori informazioni.

Conclusione

Si spera che ora tu abbia una migliore comprensione di cosa sia Git e come può essere sfruttato per lavorare con il codice del tuo sito web. Git può essere utilizzato per tutti i file che cambierai nel tempo, anche se non è un codice del computer.

Git si riferisce ai suoi utenti target come "lavoratori della conoscenza", un vecchio termine preso in prestito da IBM. Per qualsiasi cosa, dalle note sul desktop alle ricette, a interi libri, Git ti offre un modo per organizzare meglio il tuo lavoro e lasciarti una solida traccia del motivo per cui hai apportato ogni modifica e quando è stata apportata.

Il potere di poter tornare indietro nel tempo e vedere le tue modifiche, unito alla possibilità di lavorare in universi paralleli illimitati con ramificazioni e fusioni, rende Git uno strumento indispensabile per chiunque lavori sul codice. Git è anche il modo principale con cui i team collaborano a progetti di codice.

Git è gratuito e la maggior parte delle GUI Git, come GitKraken, ha versioni gratuite. Non c'è motivo per cui non dovresti usare Git per tenere traccia del tuo lavoro, quindi "Git" su di esso!

Risorse correlate

- Sviluppo locale di WordPress con XAMPP

- Utilizzo e flussi di lavoro avanzati di Git

- Git Hooks

- Che cos'è un sito di sviluppo?

- Memorizzazione nella cache per WordPress