Nozioni di base sulla ramificazione di Git
La capacità di ramificare facilmente è una delle migliori caratteristiche di Git. La creazione di rami in altri sistemi di controllo della versione può essere costosa in termini di spazio e requisiti di elaborazione. La ramificazione di Git è efficiente. Quindi gli utenti sono più inclini a usare i rami in Git.
Un flusso di lavoro ramificato
Supponiamo che tu abbia iniziato un nuovo progetto chiamato myvideogame. Ha un solo ramo. Il nome predefinito del ramo iniziale in Git si chiama master. Viene creato automaticamente. Creiamo il repository Git di myvideogame.
$ mkdir miovideogioco$ cd miovideogioco
$ git init
Hai creato un repository Git vuoto. Aggiungiamo il nostro design.txt con del testo dentro.
$ echo "Decisione di progettazione 1: Aggiungi immagini" >> design.TXT$ echo "Decisione progettuale 2: scrivere codice" >> design.TXT
$ git add -A
$ git commit -m "C0: Aggiunto file di disegno"
Aggiungiamo altre modifiche:
$ echo "Decisione di progettazione 3: gioco di prova" >> design.TXT$ git add -A
$ git commit -m "C1: File di disegno modificato"
Se controlli la cronologia, troverai:
$ git log --oneline6a09bd6 C1: File di disegno modificato
5f18d89 C0: Aggiunto file di disegno
Se controlli lo stato di Git e tutti i rami che sono stati creati (usando il comando: git branch -a), vedrai:
$ git statoSul maestro di filiale
niente da eseguire, pulizia della directory di lavoro
$ git ramo -a
* maestro
Attualmente, hai la seguente situazione:
Hai fatto due commit nel ramo master.
Supponiamo che tu abbia trovato bug nei test del gioco, ma non vuoi affrontare il problema nel ramo principale perché non vuoi ancora fare confusione con il design originale. Quindi puoi creare un nuovo ramo chiamato bugfix:
$ git branch bugfixOra, se controlli tutti i rami:
$ git ramo -arisoluzione del problema
* maestro
Ora hai creato un nuovo ramo chiamato bugfix. La situazione può essere visualizzata come questa:
Tuttavia, la stella (*) accanto al ramo master significa che sei ancora nel master. Se apporti modifiche, andrà comunque nel ramo principale. Puoi utilizzare il comando checkout per modificare i rami:
$ git checkout bugfixPassato al ramo 'bugfix'
Puoi controllare quale ramo stai utilizzando con stato o il comando "branch -a":
$ git statoBugfix sul ramo On
niente da eseguire, pulizia della directory di lavoro
$ git ramo -a
* risoluzione del problema
maestro
Ora, correggiamo il bug:
$ echo "Bug Fix 1" >> design.TXT$ git add -A
$ git commit -m "C2: Bug risolto 1"
Hai creato una situazione come questa:
Il ramo master non ha il cambio C2. Puoi verificarlo facilmente controllando la cronologia dei due rami.
Innanzitutto, la storia del ramo bugfix:
$ git statoBugfix sul ramo On
niente da eseguire, pulizia della directory di lavoro
$ git log --oneline
e8f615b C2: Bug risolto 1
6a09bd6 C1: File di disegno modificato
5f18d89 C0: Aggiunto file di disegno
Quindi puoi passare al ramo principale e controllarne la cronologia:
$ git checkout masterPassato al ramo 'master'
$ git stato
Sul maestro di filiale
niente da eseguire, pulizia della directory di lavoro
$ git log --oneline
6a09bd6 C1: File di disegno modificato
5f18d89 C0: Aggiunto file di disegno
Puoi vedere che il ramo principale non ha le modifiche dal ramo bugfix.
Puoi sempre creare una nuova filiale dalla filiale attuale in cui ti trovi. Supponiamo di voler creare un altro ramo che conterrà funzionalità sperimentali. Puoi creare il ramo dal master e aggiungervi funzionalità sperimentali:
$ git statoSul maestro di filiale
niente da eseguire, pulizia della directory di lavoro
$ git branch sperimentale
$ git checkout sperimentale
Passato al ramo "sperimentale"
$ git stato
Sul ramo sperimentale
niente da eseguire, pulizia della directory di lavoro
$ echo "Aggiunta di funzioni all'esperimento" >> design.TXT
$ git add -A
$ git commit -m "C3: Aggiunte funzionalità sperimentali"
[sperimentale 637bc20] C3: Aggiunte funzioni sperimentali
1 file modificato, 1 inserimento(+)
Se controlli la cronologia del tuo ramo sperimentale, vedrai:
$ git statoSul ramo sperimentale
niente da eseguire, pulizia della directory di lavoro
$ git log --oneline
637bc20 C3: Aggiunte funzionalità sperimentali
6a09bd6 C1: File di disegno modificato
5f18d89 C0: Aggiunto file di disegno
Noterai che non hai il commit C2 che è stato creato nel ramo bugfix. Poiché il ramo sperimentale viene creato dal ramo principale, non vede le modifiche alla correzione dei bug. Hai la seguente situazione:
Conclusione
Congratulazioni! Hai imparato a ramificare.
I rami Git sono facili e veloci da realizzare. È uno dei motivi alla base della popolarità di Git. Se vuoi diventare un utente esperto di Git, devi diventare esperto nel branching di Git.
Ulteriori studi:
https://git-scm.com/book/it/v2/Git-Branching-Basic-Branching-and-Merging