SlideShare ist ein Scribd-Unternehmen logo
1 von 107
Downloaden Sie, um offline zu lesen
Sviluppo collaborativo
Simone Scalabrino
Evoluzione dei sistemi software
8/12/2015
1. Introduzione: VCS
4. GitHub
Git
2. Comandi di base
3. Comandi avanzati
Team di sviluppo
Team di sviluppo
● Come condividere il codice?
● Come capire chi ha fatto cosa?
Sistema stabileSistema stabile
Sistema stabileSistema stabile
Ma manca una funzionalità...Ma manca una funzionalità...
Qualcosa puòQualcosa può
sempre andaresempre andare
storto!storto!
Come si puòCome si può
tornare indietrotornare indietro
nel tempo?nel tempo?
Version Control Systems
Concurrent Version System
Subversion
VCS centralizzati
VCS centralizzati
Repository
Client 1 Client 2 Client 3
Mercurial
Git
VCS distribuiti
VCS distribuiti
Repository
Repository Repository Repository
VCS distribuiti
Repository
Repository Repository Repository
Git
Nasce nel 2005
Creato da Linus Torvalds
“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.”
Terzo scenario
Git
Linea di comando
Interfaccia grafica
Plugin IDE
Come funziona?
Client
Repository
remoto
Come funziona?
Client
Repository
centrale
Git può essere usato offline
File
Working
directory
Staging
area
Repository
locale
add
commit
checkout/merge
File
Working
directory
Staging
area
Repository
locale
Repository
remoto
add
commit
push
fetch/pull
checkout/merge
src/Main.java
src/Network.java
src/Files.java
src/FS.java
File modificati Staging area
File modificati
src/Main.java
src/FS.java
Staging area
Add
src/Main.java
src/Network.java
src/Files.java
src/FS.java
src/Network.java
src/Files.java
File modificati Staging area
Commit
src/Main.java
src/FS.java
af342
435dd acc23 54634Locale
Push
Remoto
af342
af342
435dd acc23 54634Locale
Push
Remoto
af342
435dd acc23 54634
435ddLocale
Fetch
Remoto
af342
435dd acc23 54634af342
435ddLocale
Fetch
Remoto
af342
435dd acc23 54634af342
acc23 54634
Iniziamo!
Git init
● Crea un repository git vuoto in una
determinata cartella
● La cartella “.git” conterrà tutti i dati storici
git init
Git clone
● Crea una copia locale di un repository remoto
esistente
git clone http://rm.te/x.git
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
Gitignore
● Si può inserire un file “.gitignore”
● Contiene un elenco di pattern di nomi di file o
cartelle da ignorare
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
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
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!”
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
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
Git revert
● Elimina le modifiche del commit specificato
● Crea un nuovo commit di revert
git revert af2314d
git revert HEAD~1
af432 d5364 cb654 36c34
HEAD
af432 d5364 cb654 36c34
HEAD
(Hard) Reset
HEAD
Revert
ff24f3
af432 d5364 cb654 36c34
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
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
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
Demo 1
Comandibase
Cosa abbiamo risolto?
Cosa abbiamo risolto?
1. Possiamo collaborare usando un
repository remoto
2. Possiamo tornare a un commit
passato se qualcosa non va
�
Sviluppo non lineareSviluppo non lineare
Git permette lo
Sviluppo non lineareSviluppo non lineare
Git permette lo
incoraggia
Branch
Ramo di sviluppo parallelo
Parte da un ramo già
esistente
master 132fd 2dfc3 662fa
cdc23 87435
mastermaster
develop
132fd 2dfc3 662fa
Merge
13243mastermaster
develop cdc23 87435
132fd 2dfc3 662fa
Merge automatico
● Algoritmi per il merge automatico
– Three way
– Recursive
– Fast-forward
● Nuovo commit alla fine del processo
Se ci sonoSe ci sono
conflitti?conflitti?
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)
Modello di sviluppo
master
develop
topic
Master
● Contiene la versione più aggiornata del
sistema
● Si può usare, contiene codice testato e
funzionante
Develop
● Contiene la prossima versione del sistema
● Nuove funzionalità
● Il codice non è necessariamente stabile, è
testato solo parzialmente
● Viene fuso in “master” quando è stabile
Topic
● Si crea un branch per ogni nuova funzionalità
del sistema
● Ogni branch “topic” contiene codice
puramente sperimentale, spesso non testato
Esempio
324da
17d3f
98ffa 1132d
243dd ba231 a3b42 901ac
cc1ac d2ff1
1d12a
9873c
master
develop
login
registration afc23
Nuovi comandi
Git status
● Dà anche informazioni sul branch corrente
git status
git status -b
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
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
Git merge
● Fonde un altro branch nel branch corrente
● Il merge è automatico, quando possibile
git merge topic
Git pull
● Preleva i file dal repository remoto
● Fa il merge con il branch attuale
git pull origin topic1
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
Git stash
● Salva i cambiamenti attuali su uno stack, non
nella staging area
● Ripristina l'ultimo commit
git stash
git stash pop
Demo 2
Branch
È tutto su git?
Altro
http://www.git-scm.com
http://www.stackoverflow.com
GitHub
Repository git
Sviluppo Open Source
Social
GitHub
Repository Repository Repository
Impostazione del remote
● Come visto precedentemente…
git remote add [URL]
● URL di GitHub:
– http://github.com/[OWNER]/[REPO]
– http://github.com/[OWNER]/[REPO].git
Markdown
Markdown
● Formattazione di testi in GitHub
– README.md
– Documentazione
– Discussioni
● È convertito in HTML
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 { }
```
Social coding
Issue
TAG
Bug, feature request, ...
Discussione su un argomento
Riferimenti ai commit
Commit
Possono essere commentati
Riferimenti alle issue
Utenti
Following/Followers
Star ai progetti preferiti
Fork
Branch in git
cdc23 87435
master
develop
132fd 2dfc3 662fa
Fork su GitHub
Esempio
StarOffice
OpenOffice
LibreOffice
NeoOffice
Pull request
Pull request
● Si può:
– Commentare
– Migliorare (follow-up commits)
– Unire (merge)
– Chiudere
– Eliminare
Pull request
Pull request
Pull request
Pull request
Comment
Pull request
Pull request
Comment
Commit
Pull request
Pull request
Comment
Commit
Commit
Pull request
Pull request
Comment
Commit
Commit
Comment
Pull request
Pull request
Comment
Commit
Commit
Comment
Merge
Pull request
Pull request
Comment
Commit
Commit
Comment
Merge
Anche per i branch
dello stesso
repository!
Demo 3
GitHub
Per concludere
Grazie per l'attenzione
Domande?

Weitere ähnliche Inhalte

Was ist angesagt?

Git Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaGit Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funziona
Innoteam Srl
 
Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3
Paolo Ferretti
 

Was ist angesagt? (20)

Perchè Git?
Perchè Git?Perchè Git?
Perchè Git?
 
Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale
 
Revisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitRevisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con git
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5
 
Systemd - Firenze LUG
Systemd - Firenze LUGSystemd - Firenze LUG
Systemd - Firenze LUG
 
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
CI/CD - Presentazione Introduttiva
CI/CD - Presentazione IntroduttivaCI/CD - Presentazione Introduttiva
CI/CD - Presentazione Introduttiva
 
NuIEEE - Workshop de Git
NuIEEE - Workshop de GitNuIEEE - Workshop de Git
NuIEEE - Workshop de Git
 
Continous integration e jenkins
Continous integration e jenkinsContinous integration e jenkins
Continous integration e jenkins
 
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
 
Git Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaGit Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funziona
 
Systemd - Como Lug
Systemd - Como LugSystemd - Como Lug
Systemd - Como Lug
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Bash-Only Deployment
Bash-Only DeploymentBash-Only Deployment
Bash-Only Deployment
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
Meetup Code Garden Roma e Java User Group Roma: metodi asincroni con Spring -...
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)
 
Multimedia con GNU/Linux
Multimedia con GNU/LinuxMultimedia con GNU/Linux
Multimedia con GNU/Linux
 
Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3
 

Andere mochten auch

Taller inicio de clase solucion naren avila julieth chaparro 11-g
Taller inicio de clase solucion naren avila julieth chaparro 11-gTaller inicio de clase solucion naren avila julieth chaparro 11-g
Taller inicio de clase solucion naren avila julieth chaparro 11-g
Naren Avila
 
Emitindo seu Certificado
Emitindo seu CertificadoEmitindo seu Certificado
Emitindo seu Certificado
ARScaramel
 
Mision Australia The Michael Project research
Mision Australia The Michael Project researchMision Australia The Michael Project research
Mision Australia The Michael Project research
Kerry Edgecombe
 
ColdFusion framework comparison
ColdFusion framework comparisonColdFusion framework comparison
ColdFusion framework comparison
VIkas Patel
 
Sinibaldi C&F - Catalogue 2013
Sinibaldi C&F - Catalogue 2013Sinibaldi C&F - Catalogue 2013
Sinibaldi C&F - Catalogue 2013
Gustave Sinibaldi
 
Paul Turk_CV ...
Paul Turk_CV ...Paul Turk_CV ...
Paul Turk_CV ...
Paul Turk
 
GCU-HCA 699 Capstone Presentation Power Point
GCU-HCA 699 Capstone Presentation Power PointGCU-HCA 699 Capstone Presentation Power Point
GCU-HCA 699 Capstone Presentation Power Point
Tasha Chenoweth, MHA
 
Twilight in delhi
Twilight in delhiTwilight in delhi
Twilight in delhi
maahwash
 
Brasil - Introduçao, Localizaçao e Limites
Brasil - Introduçao, Localizaçao e LimitesBrasil - Introduçao, Localizaçao e Limites
Brasil - Introduçao, Localizaçao e Limites
guestbb4169
 

Andere mochten auch (20)

Taller inicio de clase solucion naren avila julieth chaparro 11-g
Taller inicio de clase solucion naren avila julieth chaparro 11-gTaller inicio de clase solucion naren avila julieth chaparro 11-g
Taller inicio de clase solucion naren avila julieth chaparro 11-g
 
Emitindo seu Certificado
Emitindo seu CertificadoEmitindo seu Certificado
Emitindo seu Certificado
 
Mision Australia The Michael Project research
Mision Australia The Michael Project researchMision Australia The Michael Project research
Mision Australia The Michael Project research
 
מצגת תפעול אפליקציה בעברית
מצגת תפעול אפליקציה בעבריתמצגת תפעול אפליקציה בעברית
מצגת תפעול אפליקציה בעברית
 
Yeinimar osorio almacenamiento remoto
Yeinimar osorio almacenamiento remotoYeinimar osorio almacenamiento remoto
Yeinimar osorio almacenamiento remoto
 
ColdFusion framework comparison
ColdFusion framework comparisonColdFusion framework comparison
ColdFusion framework comparison
 
Celda solar
Celda solarCelda solar
Celda solar
 
Sinibaldi C&F - Catalogue 2013
Sinibaldi C&F - Catalogue 2013Sinibaldi C&F - Catalogue 2013
Sinibaldi C&F - Catalogue 2013
 
PRESENTACIÓ: Àfrica, un univers de realitats
PRESENTACIÓ: Àfrica, un univers de realitatsPRESENTACIÓ: Àfrica, un univers de realitats
PRESENTACIÓ: Àfrica, un univers de realitats
 
Programas para publicar informes
Programas para publicar informesProgramas para publicar informes
Programas para publicar informes
 
Paul Turk_CV ...
Paul Turk_CV ...Paul Turk_CV ...
Paul Turk_CV ...
 
Fiskum, Gary
Fiskum, GaryFiskum, Gary
Fiskum, Gary
 
Using Featured Images with WordPress
Using Featured Images with WordPressUsing Featured Images with WordPress
Using Featured Images with WordPress
 
Novel
NovelNovel
Novel
 
GCU-HCA 699 Capstone Presentation Power Point
GCU-HCA 699 Capstone Presentation Power PointGCU-HCA 699 Capstone Presentation Power Point
GCU-HCA 699 Capstone Presentation Power Point
 
Fundamentos de gestão de pessoas (dia 1)
Fundamentos de gestão de pessoas (dia 1)Fundamentos de gestão de pessoas (dia 1)
Fundamentos de gestão de pessoas (dia 1)
 
Twilight in delhi
Twilight in delhiTwilight in delhi
Twilight in delhi
 
Brasil - Introduçao, Localizaçao e Limites
Brasil - Introduçao, Localizaçao e LimitesBrasil - Introduçao, Localizaçao e Limites
Brasil - Introduçao, Localizaçao e Limites
 
Colonialism & Neocolonialism
Colonialism & NeocolonialismColonialism & Neocolonialism
Colonialism & Neocolonialism
 
Introdução A Geografia
Introdução A GeografiaIntrodução A Geografia
Introdução A Geografia
 

Ähnlich wie Git e GitHub

Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
rpanfili
 

Ähnlich wie Git e GitHub (20)

Git
GitGit
Git
 
Emerasoft Git quickstart
Emerasoft Git quickstartEmerasoft Git quickstart
Emerasoft Git quickstart
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLab
 
Git – lo stupido gestore di contenuti
Git – lo stupido gestore di contenutiGit – lo stupido gestore di contenuti
Git – lo stupido gestore di contenuti
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Git
GitGit
Git
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Git branching model
Git branching modelGit branching model
Git branching model
 
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a Git
 
Git gestione comoda del repository
Git   gestione comoda del repositoryGit   gestione comoda del repository
Git gestione comoda del repository
 
Git: un'introduzione pratica
Git: un'introduzione praticaGit: un'introduzione pratica
Git: un'introduzione pratica
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
GIT SOTTO IL COFANO
GIT SOTTO IL COFANOGIT SOTTO IL COFANO
GIT SOTTO IL COFANO
 
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine Learning
 
Development process
Development processDevelopment process
Development process
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 

Git e GitHub