lab 2: git€¦ · git: creare un repository 2 • git init • solitamente il primo comando ad...

17
Lab 2: Git Carlo Bellettini, Matteo Camilli [email protected] [email protected] 1 Dept. of Computer Science Ingegneria del software a.a. 2016/17

Upload: others

Post on 24-Sep-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Lab 2: Git

Carlo Bellettini, Matteo Camilli

[email protected]@unimi.it

1

Dept. of Computer Science

Ingegneria del software a.a. 2016/17

Page 2: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git: creare un repository

2

• git init• Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto• Uso

$ git init

• Trasforma la directory corrente in un repository Git. Viene creata una directory .git con i file di configurazione necessari

• git clone• questo comando crea una copia (intera history) di un repository esistente• Uso

$ git clone <repo> <directory>

• clona il repository locato in <repo> all’interno della directory (opzionale) <directory>• Esempio

$ git clone ssh://[email protected]/path/to/my-project.git

Page 3: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git: configurazione

3

• git config• il comando git config consente di configurare l’installazione di Git (oppure un singolo

repository) da linea di comando. E’ possibile ad esempio definire informazioni dell’utente e preferenze nel comportamento di Git.• Esempi comuni# Tell Git who you are

$ git config --global user.name "John Smith"

$ git config --global user.email [email protected]

# Select your favorite text editor

$ git config --global core.editor vim

Page 4: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git: salvare cambiamenti

4

• git add + git commit• comandi fondamentali per l’uso di Git.• mezzo con cui le versioni vengono registrate

nella history

• edit/stage/commit pattern• i file nella working directory vengono modificati• quando vogliamo registrate lo stato corrente del progetto, viene eseguito lo stage dei

cambiamenti attraverso il comando git add• una volta che lo stage stato eseguito, lo snapshot del progetto viene salvato nella

history attraverso il comando git commit

working directory stage history

Page 5: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git: struttura interna

• git log --graph, mostra la History del branch corrente• git log --oneline --graph --all, mostra History di tutti i branch in modo compatto

5

Page 6: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git commit

6

Page 7: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git branch

• git branch [name], crea un nuovo branch• git branch, lista i branch esistenti

git branch maint

7

Page 8: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git checkout

• git checkout [name], sposta il puntatore HEAD al branch specificato. Cambiamo il contesto di lavoro.

8

Page 9: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git commit (2)

9

Page 10: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git mergegit merge maint

• git merge [branch]• senza conflitti: crea un nuovo commit che incorpora le modifiche effettuate nei commit

del branch specificato .• con conflitti: risolvere i conflitti manualmente, poi add e commit

10

Page 11: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Trivial merge - fast forward

• Il commit corrente è un predecessore del commit target. In questo caso viene semplicemente spostato il puntatore ed eseguito il checkout.

11

Page 12: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

git checkout - riferimenti relativi

12

• Riferimenti relativi HEAD~ (oppure HEAD^)

Page 13: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

git checkout - riferimenti relativi

13

• Riferimenti relativi HEAD~X (risalgo la lista di X)• HEAD~ = HEAD^

detached�HEAD

Page 14: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Commit con Detached HEAD

14

• In stato detached HEAD i commit funzionano normalmente, l’unica differenza è che il ramo su cui lavoriamo non ha un nome: branch anonimo

• I branch anonimi possono essere eliminati dal garbage collector di git

Page 15: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git: sincronizzazione

15

• REMOTE• il comando remote creare, vedere e cancellare collegamenti tra repository locale e

repository remoti• listare i collegamenti con repository remoti

• git remote -v• creare un nuovo collegamento remoto

• git remote add <name> <url>• creare un nuovo collegamento remoto

• git remote rm <name>

Page 16: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Git: sincronizzazione

16

• PULL• esegue il merge con la versione remota del ramo specificato

• git pull <remote> <branch>

• PUSH• trasferimento di commit locali da repository locale a repository remoto

• git push <remote> <branch>• non è consentito il push se il risultato non è un merge di tipo fast-forward, in questo

caso occorre eseguire prima il pull, oppure forzare il push:• git push --force <remote> <branch>

Page 17: Lab 2: Git€¦ · Git: creare un repository 2 • git init • Solitamente il primo comando ad essere eseguito per inizializzare un repository vuoto • Uso $ git init • Trasforma

Riferimenti

17

• https://www.atlassian.com/git/tutorials/• http://learngitbranching.js.org/