1 of 18

GIT & GITHUB

Prof. Claudio Capobianco a.s. 2020/2021

IIS Marconi Civitavecchia

TPSI quinto anno

2 of 18

Controllo di versione: obiettivi

  1. possibilità di avere repository completamente locali, per backup personale.
  2. possibilità di scrivere il codice in modo collaborativo con altre persone.
  3. possibilità di sperimentare nuove features senza rischiare di danneggiare la base di codice principale

3 of 18

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):

  • il main branch per convenzione si chiama master
  • i rami possono riunirsi tra loro attraverso il merge

Git

4 of 18

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?

5 of 18

Nella working directory il file può negli stati di:

  • tracked: file salvati nel repository dall’ultima commit
  • untracked: tutti gli altri file, non gestiti da git

File states

Tracked files:

Main.java

Readme.md

Adapter.java

Untracked files:

garbage.tmp

working directory

6 of 18

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

7 of 18

I file staged non sono ancora salvati nel local repository, devono essere aggiunti esplicitamente (commit).

Commit

local git repository

working directory

staging area

8 of 18

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

9 of 18

Commit

10 of 18

Commit

11 of 18

checkout <commit/branch>

Workflow

working directory

staging area

local git repository

add <file>

commit

merge <commit/branch>

12 of 18

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

13 of 18

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:

  • github (useremo questo)
  • bitbucket
  • gitlab

Remote repository

14 of 18

checkout <branch>

Workflow

working directory

staging area

local git repository

add <file>

commit

merge <branch>

remote git repository

fetch

pull

push

15 of 18

Tre possibilità:

  • direttamente dall’interfaccia web di GitHub
  • dal terminale, usando git clone
  • dall’applicazione desktop di GitHub

Clone repository

16 of 18

Riferimenti

17 of 18

Riferimenti

18 of 18

Git traccia files, che possono trovarsi in differenti “locations”:

  • working directory
  • staging area
  • git repository

Locations

local git repository

working directory

staging area