Skip to navigation
Logo Penaz's Area

cat /dev/random > penaz

Controllo di Versione - Impariamo le basi di GIT


Impariamo insieme come usare GIT, il famoso sistema di controllo versione usato anche per il kernel Linux.

Questo articolo fornisce solamente delle prime basi per un uso molto limitato di GIT, se volete usarlo più proficuamente fate riferimento al Sito Ufficiale

GIT è un sistema di controllo versione distribuito, molto utile se si è programmatori e si vuole aggiungere una nuova funzionalità al proprio applicativo, ma non solo. GIT è in grado di risparmiarvi molti mal di testa, basta usarlo correttamente. Iniziamo!

Portiamoci nella cartella dove è contenuto il progetto:

cd Progetto

Siccome è la prima volta che usiamo GIT, dobbiamo prima inizializzarlo:

git init

Il programma risponderà prontamente:

Initialized empty Git repository in /home/penaz/Progetto/.git

Bene, abbiamo inizializzato il tutto. Ora siamo nel ramo principale (detto "master"), ora dobbiamo dire all'applicazione quali file tracciare. Vediamo lo stato attuale con:

git status

E otterremo:

# On branch master
#
# Initial commit
#
# Untracked Files:
#     (use "git add <file>..." to include in what will be committed)
#
# func.py
# lib.py
# main.py
nothing added to commit but untracked files present (use "git add" to track)

Ecco cosa ci dice il programma:

# On branch master

Siamo nel ramo principale

# Untracked Files:
#     (use "git add <file>..." to include in what will be committed)
#
# func.py
# lib.py
# main.py

e un elenco dei file non tracciati. Ora andremo ad aggiungere i 3 file all'elenco dei file tracciati:

git add func.py lib.py main.py

Guardiamo come cambia lo stato di tracciamento:

penaz@PenazMW ~/Progetto > git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   func.py
#       new file:   lib.py
#       new file:   main.py

Ora "untracked files" è diventato "changes to be committed" cioè i file sono nell'elenco di quelli da tracciare, ma è necessario salvare le modifiche, si può usare il comando:

git commit <NomeFile1> <NomeFile2> ...

Nel mio caso voglio salvare le modifiche a tutti i files:

git commit -a

Si aprirà NANO (o ciò che è settato come vostro editor preferito) e dovrete inserire un commento che vi permetterà di identificare il cambiamento apportato, il commento è obbligatorio altrimenti i cambiamenti non verranno salvati. GIT risponderà così:

[master (root-commit) 4d01531] Prova

Committer: Penaz <penaz@PenazMW.PenazNet>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"
git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

0 files changed
create mode 100644 func.py
create mode 100644 lib.py
create mode 100644 main.py

Verifichiamo nuovamente lo stato del tracciamento:

git status

Ottenendo:

# On branch master nothing to commit (working directory clean)

Missione compiuta! Abbiamo salvato i cambiamenti.

E se volessimo scartare i cambiamenti fatti? Semplice:

git stash

Se volessimo creare una nuova funzione sperimentale nel programma senza intaccare il progetto originale (magari funzionante)? Basta creare una diramazione del progetto (un "branch"):

git branch "Nuova_Funzione"

E poi passare al branch appena creato:

git checkout "Nuova_Funzione"

Switched to branch 'Nuova_Funzione'

Per poi modificare il tutto come abbiamo fatto prima. Ora ci sono 2 possibilità:

  • La nuova parte funziona a dovere e vogliamo integrarla nel ramo principale
  • La nuova parte non funziona e vogliamo scartarla.

In ogni caso, partiamo dallo stesso punto: tornare al branch master:

git checkout master

Switched to branch 'master'

Se vogliamo integrare la funzione nel branch master si usa il seguente comando:

git merge "Nuova_Funzione"

Updating 4d01531..19cc9dd
Fast-forward
main.py | 1 +
1 file changed, 1 insertion(+)

Se invece volessimo rimuovere il branch (-D sta per Delete):

git branch -D "Nuova_Funzione"

Deleted branch Nuova_Funzione (was 19cc9dd).

Ovviamente Git ha molte altre funzioni, ma queste sono quelle di base.

Buon Divertimento!

Saluti e al prossimo post!

Penaz.