GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come funziona Git?

Introduzione

Git è il sistema di controllo della versione decentralizzato più popolare al mondo. Avere una buona conoscenza di Git è essenziale se vuoi programmare e lavorare su un progetto di sviluppo software collaborativo.

In questo articolo imparerai come funziona Git e come utilizzare le sue funzioni cruciali.

Prerequisiti

  • Git installato e configurato (vedi come Installare Git su Windows, Installare Git su Mac, Installare Git su Ubuntu, Installare Git su CentOS 7 o Installare Git su CentOS 8)

Come funziona Git?

Git consente agli utenti di tenere traccia delle modifiche al codice e gestire il proprio progetto utilizzando semplici comandi.

Il cuore di Git è un repository utilizzato per contenere un progetto. Un repository può essere archiviato localmente o su un sito Web, come GitHub. Git consente agli utenti di archiviare diversi repository e di tenerne traccia in modo indipendente.

Durante lo sviluppo, il progetto ha diversi punti di salvataggio, chiamati commit . La cronologia dei commit contiene tutti i commit, ovvero le modifiche implementate nel progetto durante lo sviluppo. Un commit ti consente di eseguire il rollback o l'avanzamento rapido del codice a qualsiasi commit nella cronologia dei commit.

Git utilizza hash SHA-1 fare riferimento ai commit. Ogni hash univoco punta a un particolare commit nel repository. Utilizzando gli hash, Git crea una struttura ad albero per archiviare e recuperare facilmente i dati.

I file in ogni progetto Git passano attraverso diverse fasi:

  • Directory di lavoro . File modificati, ma non tracciati e non ancora pronti per il commit.
  • Directory di staging . L'aggiunta di file modificati all'ambiente di staging significa che sono pronti per il commit.
  • Impegnato . Istantanee dei file dell'area di staging salvate nella cronologia dei commit.

Il diagramma seguente mostra il flusso di lavoro di base di Git:

Le sezioni seguenti spiegano in dettaglio le funzioni di Git.

Messa in scena

Quando vuoi che Git tenga traccia delle modifiche che hai apportato a un determinato file, devi aggiungerlo all'area di staging. Git riconosce quando modifichi un file ma non lo tiene traccia a meno che tu non lo metta in scena . L'area di staging rappresenta un livello di sicurezza, che ti consente di rivedere le modifiche prima di eseguirne il commit.

Essere nell'area di staging è un prerequisito per il successivo commit dei file, ovvero implementati sul ramo principale. Puoi controllare quali file Git tiene traccia eseguendo:

git status

Per aggiungere un file all'area di staging, utilizza la seguente sintassi:

git add [filename]

Sostituisci il [filename] sintassi con il nome effettivo del file.

Ad esempio:

Se cambi idea, puoi rimuovere un file dall'area di gestione temporanea. Per annullare lo stage di un file, utilizza la seguente sintassi:

git rm --cached [filename]

Ad esempio:

Prendere impegni

Un commit rappresenta un punto di salvataggio per il tuo lavoro, un'istantanea del tuo codice in un determinato momento. L'aggiunta di file all'area di staging significa che sono pronti per il commit.

Per verificare se hai dei file pronti per il commit, esegui:

git status

Ad esempio:

Qui vediamo che tre file sono pronti per il commit. Per eseguirne il commit, usa la seguente sintassi:

git commit -m "Notes about the commit"

Ogni commit dovrebbe avere una descrizione specificata dopo il -m flag, che in seguito ti aiuterà a sapere di cosa trattava il commit.

Ad esempio:

L'output contiene il commit e indica cosa è stato modificato.

Puoi controllare la tua cronologia dei commit eseguendo:

git log

L'output mostra un registro di tutti i commit che hai effettuato, chi ha effettuato il commit, la data e le note di commit. Aggiunta del --oneline flag mostra la cronologia dei commit condensata in una riga. L'omissione del flag mostra una cronologia dettagliata dei commit.

Ripristino

Se hai commesso errori durante lo sviluppo del tuo progetto o desideri annullare un commit per qualsiasi motivo, git revert ti permette di farlo.

Il git revert comando ripristina un commit particolare, ovvero annulla il commit che hai eseguito per rimuovere le modifiche dal ramo principale.

La sintassi è:

git revert [commit_ID]

Trova gli ID commit eseguendo git log . Il codice di 7 caratteri è l'ID commit.

L'esempio seguente mostra il git revert comando:

Il git reset comando permanentemente ti riporta a un certo punto dello sviluppo. Tutti i file e le modifiche aggiunti dopo quel momento vengono annullati se vuoi aggiungerli di nuovo.

Avviso: Usa git reset solo se sei completamente sicuro di voler annullare/eliminare parti del tuo codice, poiché questa azione è irreversibile.

La sintassi è:

git reset [commit_ID]

Specificando il --hard flag rimuove i file non gestiti, rendendo impossibile il loro ripristino.

Biforcazione

Un fork è una copia completa di un repository esistente che ti consente di apportare modifiche e sperimentare senza influire sul progetto originale. Il fork è un modo per qualcuno di proporre modifiche a un progetto esistente, oppure può essere un punto di partenza per un tuo progetto se il codice è open source.

Se desideri proporre una modifica o una correzione di bug per un progetto, puoi eseguire il fork di un repository, apportare la correzione e inviare una richiesta pull al proprietario del progetto.

Il diagramma seguente illustra come funziona il fork:

Per eseguire il fork di un repository, procedi nel seguente modo:

1. Accedi al tuo account GitHub.

2. Visita la pagina del repository su GitHub e fai clic su Fork opzione.

3. Attendi il completamento del processo di fork. Al termine, avrai una copia del repository sul tuo account GitHub.

4. Il passaggio successivo consiste nel prendere l'URL del repository dal Codice sezione e clona il repository sul tuo computer locale.

5. Clonare il repository utilizzando la seguente sintassi:

git clone [repository URL]

Inserisci l'URL al posto di [repository URL] sintassi.

Ad esempio:

In questo esempio, abbiamo creato un fork di springmvc-raml-plugin repository, e ora siamo liberi di implementare le nostre modifiche o iniziare a creare un nuovo plug-in in aggiunta a quello esistente.

Diramazione

Il branching è una funzionalità di Git che consente agli sviluppatori di lavorare su una copia del codice originale per correggere bug o sviluppare nuove funzionalità. Lavorando su un ramo, gli sviluppatori non influiscono sul ramo principale finché non vogliono implementare le modifiche.

Il ramo principale rappresenta generalmente la versione stabile del tuo codice, che viene rilasciato o pubblicato. Ecco perché dovresti evitare di aggiungere nuove funzionalità e nuovo codice al ramo principale se sono instabili.

La ramificazione crea un ambiente isolato per provare le nuove funzionalità e, se ti piacciono, puoi unirle nel ramo principale. Se qualcosa va storto, puoi eliminare il ramo e il ramo principale rimane intatto.

La ramificazione facilita la programmazione collaborativa e consente a tutti di lavorare sulla propria parte del codice contemporaneamente.

Il diagramma seguente è una rappresentazione visiva della ramificazione in Git:

La sintassi per creare un nuovo ramo in Git è:

git branch [branch-name]

Inserisci un nome per la tua filiale al posto del [branch-name] sintassi. Ad esempio:

In questo esempio, abbiamo creato un nuovo ramo denominato feature-1 .

Fusioni e conflitti

Il git merge Il comando consente agli sviluppatori che lavorano su una nuova funzionalità o su una correzione di bug su un ramo separato di unire le loro modifiche al ramo principale al termine. Unire le modifiche significa implementarle nel ramo principale.

Gli sviluppatori possono inserire le loro modifiche utilizzando git merge senza dover inviare il proprio lavoro a tutti coloro che lavorano al progetto.

Per vedere le tue filiali esistenti, esegui:

git branch -a

Per questo tutorial, abbiamo creato un ramo separato chiamato feature-1 . Per unire la funzione-1 filiale con il master filiale, procedi nel seguente modo:

1. Passare al ramo principale. Il git merge comando richiede che tu sia sul ramo di ricezione dell'unione. Eseguire il comando seguente per passare al ramo principale:

git checkout master

2. Dopo essere passati al ramo principale, utilizzare la seguente sintassi per unire le modifiche:

git merge [branch-name]

Inserisci il nome della tua filiale al posto del [branch-name] sintassi.

Ad esempio:

Git inserisce automaticamente le tue modifiche nel ramo principale, visibile a chiunque lavori al progetto.

Tuttavia, a volte potresti imbatterti in unisci conflitti .

Ad esempio, si verifica un conflitto se qualcuno decide di apportare modifiche al ramo principale mentre stai lavorando su un altro ramo. Questo tipo di conflitto si verifica perché desideri unire le modifiche al ramo principale, che ora è diverso dalla copia del codice.

La nostra guida dettagliata offre diversi metodi per risolvere i conflitti di unione in Git.

Recupero/Ritiro modifiche

Il git fetch e git pull i comandi vengono entrambi utilizzati per recuperare le modifiche dal repository remoto.

La differenza è che git fetch recupera solo i metadati dal repository remoto ma non trasferisce nulla al tuo repository locale. Ti consente solo di sapere se sono disponibili modifiche dall'ultimo pull.

Nell'esempio seguente, git fetch ci informa che ci sono alcune modifiche nel repository remoto, ma non è cambiato nulla nel repository locale:

D'altra parte, git pull controlla anche eventuali nuove modifiche nel repository remoto e porta tali modifiche al tuo repository locale.

Quindi, git pull fa due cose con un comando:un git fetch e un git merge . Il comando scarica le modifiche apportate al tuo ramo corrente e aggiorna il codice nel tuo repository locale.

Ad esempio:

In questo output, vediamo che si trattava di un tipo di unione ad avanzamento rapido e che Git ha estratto un file nel repository locale - README.md .

Modifiche urgenti

Il git push comando fa l'opposto di git pull , consentendoti di condividere le modifiche e pubblicarle nel repository remoto.

Quando apporti modifiche localmente e desideri inviarle a un repository remoto, esegui:

git push

Ad esempio:

Se hai creato un nuovo ramo in locale, che non esiste in remoto, il comando restituisce un errore quando si tenta di eseguire il push delle modifiche:

Git offre la soluzione nell'output. Esegui il comando specificato nell'output per eseguire il push del tuo ramo a monte:

Ribasamento

Quando crei un ramo, Git crea una copia del codice esistente da sviluppare ulteriormente. A volte potrebbe essere necessario incorporare nuove modifiche dal ramo principale per stare al passo con lo sviluppo generale.

Il ribasamento implica l'implementazione di nuove modifiche dal ramo principale al ramo delle funzioni. Ciò significa che Git riproduce le nuove modifiche dal ramo principale, creando commit in cima alla punta del tuo ramo di funzionalità.

Segui questi passaggi per rifondare il tuo ramo di funzionalità:

1. Passa al ramo delle funzionalità utilizzando git checkout . La sintassi è:

git checkout [branch-name]

2. Esegui il comando seguente per rebase del tuo ramo:

git rebase master

Il diagramma seguente mostra come funziona la funzione rebase:


Ubuntu
  1. Cos'è NGINX? Come funziona?

  2. Come funziona Awk '!a[$0]++'?

  3. Come funziona il bit appiccicoso?

  4. Ssh – Come funziona Tcp-keepalive in Ssh?

  5. Come funziona Sanlock nella virtualizzazione di RedHat

Che cos'è il DNS inverso e come funziona?

Come funziona SFTP?

Git Revert Commit:come annullare l'ultimo commit

Come annullare l'ultimo commit in Git

Cos'è Docker? Come funziona?

Come funziona la memoria di scambio in Linux?