GIT & GITHUB
Prof. Claudio Capobianco a.s. 2020/2021
IIS Marconi Civitavecchia
TPSI quinto anno
Controllo di versione: obiettivi
Git è un sistema per il controllo di versione open source e distribuito (tutti hanno una copia completa del repository).
Creato nel 2005 da Linus Torvalds per il Kernel Linux.
Le versioni formano un albero (tree) con dei rami (branch):
Git
Problema
Il repository è associato ad una cartella sul file system.
Però non voglio che tutti i file all’interno della cartella vengano sempre salvati nel repository.
Come fare?
Nella working directory il file può negli stati di:
File states
Tracked files:
Main.java
Readme.md
Adapter.java
Untracked files:
garbage.tmp
working directory
Staged:
Main.java
Un file tracked va aggiunto (add) su una piattaforma temporanea (staging area) dove possono essere tolti o rimessi senza conseguenze.
Staging files
Modified:
Readme.md
Unmodified:
Adapter.java
working directory
staging area
I file staged non sono ancora salvati nel local repository, devono essere aggiunti esplicitamente (commit).
Commit
local git repository
working directory
staging area
Per poter visionare una vecchia versione del codice, esiste il comando checkout che riporta la working directory ad uno specificato commit.
Dal repo alla working directory
local git repository
working directory
Commit
Commit
checkout <commit/branch>
Workflow
working directory
staging area
local git repository
add <file>
commit
merge <commit/branch>
E’ fondamentale avere una convenzione comune per il commento di ogni commit, ad esempio:
# If applied, this commit will...
# Explain why this change is being made
# Provide links to any relevant tickets, articles or other resources
Per aggiungere questo template, salvarlo in un file di testo ed usare il comando:
git config --global commit.template ~/.git_commit_msg.txt
Commit
Come “remote” repository potete indicare qualsiasi altro repository: un’altra copia nella vostra stessa macchina, un’altro repo in rete locale, o un repo nel cloud.
Se vi appoggiate al cloud, potete usare servizi di hosting che offrono molti servizi aggiuntivi: pull requests, gestione di utenti e gruppi, organizzazione dei task.
I servizi più conosciuti sono:
Remote repository
checkout <branch>
Workflow
working directory
staging area
local git repository
add <file>
commit
merge <branch>
remote git repository
fetch
pull
push
Tre possibilità:
Clone repository
Riferimenti
Git flow
http://nvie.com/posts/a-successful-git-branching-model
Git commit template
http://codeinthehole.com/writing/a-useful-template-for-commit-messages/
Udacity commit syle guide
https://udacity.github.io/git-styleguide/
Riferimenti
Git traccia files, che possono trovarsi in differenti “locations”:
Locations
local git repository
working directory
staging area