Git è un software per il controllo di versione distribuito utilizzabile da interfaccia a riga di comando, creato da Linus Torvalds nel 2005. (Wikipedia)
Intro
GIT è uno strumento fondamentale per lo sviluppo di qualsiasi software/progetto in qualsiasi linguaggio di programmazione, perchè ci permette di tenere traccia dei progressi fatti nel corso del tempo, consultare lo storico, diramare il codice su più versioni, suddividere i compiti tra più sviluppatori, tenere il codice sincronizzato tra più postazioni, e tanto altro.
Tutti i progetti del nostro laboratorio li trovi in GIT repository pubblici sul nostro GitHub.
Abbiamo già visto come installare GIT ed integrarlo nel nostro ambiente di sviluppo, e questo articolo non è una guida o tutorial su GIT, ce ne sono già un’infinità in rete e molto più esaustive di quanto potrei essere io.
Qui riporto semplicemente una raccolta di comandi che è indispensabile conoscere (o tenere a portata di mano) per lavorare con GIT da riga di comando. Questo è il foglio dei trucchi (cheat sheet) tutto sgualcito che ho da secoli sul tavolo
Clone
Per scaricare e lavorare in locale sul proprio pc su un progetto ospitato su un server remoto è necessario clonarlo:
$ git clone URL
# Esempio:
$ git clone https://github.com/ZioTester/ESP32-DevKitC-LAN8720
In questo articolo trovi un esempio dettagliato su come clonare un repository da GitHub.
Init
Per inizializzare una directory locale e trasformarla in un repository git:
$ git init
Status
Ci mostra lo stato del repository:
$ git status
On branch dev
Your branch is up to date with 'origin/dev'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
no changes added to commit (use "git add" and/or "git commit -a")
In questo esempio, lo status ci riporta che nel repository c’è un file modificato (not staged, index.html) ed un nuovo file (utracked, README.md).
Add
I nuovi files e quelli modificati vanno aggiunti all’area di staging, che è uno stato “intermedio” prima del commit. Tutti i files e relative modifiche, prima di essere tracciati nel nostro repository, devono passare per lo staging tramite il comando add. Una spiegazione più esaustiva dello staging la trovi qui.
# aggiunge il file index.html
$ git add index.html
# aggiunge tutto il contenuto della directory corrente:
$ git add .
Commit
Le modifiche, dopo essere state aggiunte allo stage, vengono definitivamente tracciate tramite il commit.
# effettua il commit dei files aggiunti allo stage
# con relativo commento
$ git commit -m "questa è una modifica del file index.html"
Branch
Restituisce una lista dei rami (branches) presenti nel repository. Il ramo contrassegnato con l’asterisco è il ramo corrente sul quale stiamo lavorando.
$ git branch
* dev
master
In questo esempio, il nostro repository contiene due rami, dev (quello corrente) e master.
Checkout
Per passare da un ramo all’altro utilizziamo il comando checkout:
# fa il checkout del ramo "master"
$ git checkout master
# crea un nuovo ramo "test" dal ramo corrente e ne fa il checkout
$ git checkout -B test
Merge
Due rami possono essere uniti (merge)
# fa il merge del ramo "test" nel ramo corrente
$ git merge test
Branch delete
Eliminazione dei rami:
# elimina un ramo locale
$ git branch --delete test
# elimina i riferimenti in locale a rami già eliminati in remoto
git fetch -p
# imposta l'eliminazione automatica in locale dei rami eliminati in remoto:
git config --global fetch.prune true
Remote
Il repository locale può essere associato ad una copia remota
# mostra il repository remoto
$ git remote -v
#imposta "new.git.url/here" come repository remoto
$ git remote set-url origin new.git.url/here
Push/Pull
Se abbiamo settato una remote origin per il nostro repository, possiamo sincronizzarlo periodicamente con i comandi di push (upload delle modifiche) pull (download delle modifiche)
# sincronizza le modifiche locali con il repository remoto
$ git push
# sincronizza le modifiche remote con il repository locale
$ git pull
remove commits
Se per errore abbiamo committato delle modifiche che vogliamo rimuovere, usiamo il reset.
# rimuove l'ultimo commit dal repository locale (incrementare HEAD~n per tornare ancora più indietro)
git reset --hard HEAD~1
# siccessivamente è possibile forzare il reset anche sul remote
git push origin HEAD --force
Please tell me who you are.
La prima volta che usiamo git e proviamo a fare un commit, è necessario settare alcune informazioni obbligatorie quali il nostro nome ed il nostro indirizzo email, utili quando a lavorare sul repository sono più sviluppatori.
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"