16. “Per i primi 10 anni di manutenzione del
kernel, usavamo letteralmente tarball (archivi
compressi) e patch, che è un sistema di gestione
del codice sorgente molto migliore di CVS.”
“Per un po' lo slogan di Subversion era ‘CVS
fatto bene’, o qualcosa di simile, e se incominci
con quel tipo di slogan, non puoi andare da
nessuna parte. Non c'è modo di fare CVS bene.”
31. Git init
● Crea un repository git vuoto in una
determinata cartella
● La cartella “.git” conterrà tutti i dati storici
git init
32. Git clone
● Crea una copia locale di un repository remoto
esistente
git clone http://rm.te/x.git
33. Git status
●
Stampa lo stato attuale del branch su cui si sta
lavorando
● Elenca i file:
– Modificati e nella staging area
– Modificati e non (ancora) nella staging area
– Non tracciati
git status
34. Gitignore
● Si può inserire un file “.gitignore”
● Contiene un elenco di pattern di nomi di file o
cartelle da ignorare
35. Git diff e difftool
● Mostra le differenze tra un file e la versione
nell'ultimo commit
● Diff mostra le differenze nella shell
● Difftool permette di usare un tool esterno
git diff src/network.c
git difftool src/network.c
git difftool
36. Git add
● Aggiunge un file alla staging area
● La staging area contiene tutti i file che faranno parte
del prossimo commit
●
Si può aggiungere un file ignorato usando l'opzione “-f”
git add src/test.c
git add src/
git add -f src/test.pdf
37. Git commit
●
Carica sul repository locale i file nella staging area
●
Crea uno snapshot del progetto
●
È identificato univocamente da un hash (SHA1) di
40 caratteri
●
Contiene un breve messaggio che indica i motivi
del commit
git commit -m “Fixed!”
38. Esempio di commit
Commit 2f68f110fa5f66b2a3c603a7e3d6cdcecd54ad2e
Author: Mario Rossi <m.rossi@unimol.it>
Date: Fri Dec 4 14:30:23 2015 +0100
Fixed bug #12. Now the connection works properly.
File:
src/network.c
src/network.h
src/main.c
39. Git reset
● Ambiguo! Ha due significati:
– Opposto di “add”
– Opposto di “commit”
● Toglie un file dalla staging area
git reset src/main.c
● Permette di tornare ad un commit passato
git reset --hard af2314d
40. Git revert
● Elimina le modifiche del commit specificato
● Crea un nuovo commit di revert
git revert af2314d
git revert HEAD~1
44. Git remote
● Permette di impostare un repository remoto
– Utile se si inizia con “git init”
– Inutile se si clona un repository remoto
git remote add http://rm.te/x.git
45. Git push
● Carica i commit locali sul repository remoto
● Rende pubblici i cambiamenti effettuati, il
codice è stato testato e funziona
git push origin master
git push http://rm.te/x.git master
46. Git fetch
● Opposto del “push”
● Carica sul repository locale gli ultimi commit
del repository remoto
git fetch origin master
git fetch http://rm.te/x.git master
60. Merge manuale
● Git interrompe il merge automatico
● Per ogni file in conflitto bisogna scegliere se:
– Mantenere la versione del branch corrente/locale
– Mantenere la versione del branch fuso/remoto
– Fondere linea per linea
● Bisogna fare manualmente il commit di
merge (il messaggio è già impostato)
62. Master
● Contiene la versione più aggiornata del
sistema
● Si può usare, contiene codice testato e
funzionante
63. Develop
● Contiene la prossima versione del sistema
● Nuove funzionalità
● Il codice non è necessariamente stabile, è
testato solo parzialmente
● Viene fuso in “master” quando è stabile
64. Topic
● Si crea un branch per ogni nuova funzionalità
del sistema
● Ogni branch “topic” contiene codice
puramente sperimentale, spesso non testato
67. Git status
● Dà anche informazioni sul branch corrente
git status
git status -b
68. Git branch
● Crea un nuovo branch.
● Il commit 0 del nuovo branch è il commit
attuale del branch di partenza
● Non cambia branch!
git branch topic
69. Git checkout
●
Ambiguo! Ha due significati:
– Cambia il branch (sposta la HEAD)
git checkout topic
git checkout -b topic2
– Ripristina lo stato di un file da un commit passato
git checkout -- src/test.c
git checkout af453d -- src/test.c
70. Git merge
● Fonde un altro branch nel branch corrente
● Il merge è automatico, quando possibile
git merge topic
71. Git pull
● Preleva i file dal repository remoto
● Fa il merge con il branch attuale
git pull origin topic1
72. Git mergetool
●
Se il merge automatico fallisce, permette di usare
un tool esterno per fare il merge
●
Non sostituisce “merge”!
●
Tool per il merge:
– Meld
– Beyond compare
git mergetool
73. Git stash
● Salva i cambiamenti attuali su uno stack, non
nella staging area
● Ripristina l'ultimo commit
git stash
git stash pop
84. Markdown
● Formattazione di testi in GitHub
– README.md
– Documentazione
– Discussioni
● È convertito in HTML
85. Markdown in 1 minuto
Main heading
===============
This is *italic*, this is **bold**, this is `monospace`
* List Item 1
* List Item 2
# Heading 1
## Heading 2
### Heading 3
```java
public class Test { }
```