57
#CDays14 – Roma - 23, 24 e 25 Settembre 2014 VS04 – TFS: Quale source control Gian Maria Ricci [email protected] - @alkampfer http://www.codewrecks.com/ http://www.getlatestversion.it/ http://blogs.ugidotnet.org/rgm

TFS - Quale source control

Embed Size (px)

Citation preview

Page 1: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

VS04 – TFS: Quale source control

Gian Maria Ricci

[email protected] - @alkampfer

http://www.codewrecks.com/http://www.getlatestversion.it/http://blogs.ugidotnet.org/rgm

Page 3: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Tfs e git, perché?• Richiesta di avere un source control distribuito

• Diffusione capillare e supporto su tutti i sistemi / IDE / strumenti

• Stabile, manutenuto ed in continua evoluzione

• Apertura verso l’open source

• Lavoro offline

• Easy Branching

• Integrato con TFS al pari (quasi) di TFVC

Page 4: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Non esiste Microsoft Git

Page 5: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Cosa scelgo?

Page 6: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Quando scegliere• Un Team Project può utilizzare solamente TFVC oppure Git

• In approcci con «Single Team Project» questo significa scegliere il source control all’inizio

• È comunque possibile creare un nuovo Team Project e «convertire» il vecchio codice

• Passare da un centralizzato ad un distribuito o viceversa comporta comunque riorganizzare/istruire/cambiare

Page 7: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

VCS – Paradigmi di basePro Contro

Check-inCheck-out

• Codebase molto grandi

• Security granulare

• Controllo attività utenti

• Meno intuitivo

• Favorisce l’uso di lock

• Sempre connesso

• Editing offline

• Cross tool

• Intuitivo per chi vieneda SVN

• Meno performante per codebase molto larghe

• No check-out lock

• Completamente offline

• Clone completo

• First Class Branching

• …

• Più complesso

• Non performante per grandi file binari

• Necessita di piùdisciplina

Page 8: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

TFVC > Git / Git > TFVC

Git TFVC

Page 9: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Debbo reimparare tutto?

Supporto Nativo in

Visual Studio Confort Zone

Page 10: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

demoPrimi passi con Git e Visual Studio

Page 11: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Andando in profondità

Visual Studio ha un

buon supporto git,

che è in continua

evoluzione,

ma git è complesso

è va «masticato»

bene per non farsi

male

Page 12: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Alcune considerazioni

Git Pro

Supporto IDE multiple

Multi sistema

Stack Overflow

Branching

Offline

Well Known Workflow

Git Contro

Strumenti eterogenei

Necessità di più training

Complicazione History

Strutturazione repository

Tfvc Pro

Semplice

Repository Lineare

Sopporta repo mal strutturati

Tfvc Contro

Scarso supporto branch

Nessun supporto offline

Flussi di lavoro semplici

Page 13: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Cattive analogie TFVC <-> Git• Git è simile a TFVC, solamente che si ha un repository locale ed uno (o

piu server remoti)

• Git pull è l’analogo di Get Latest Version (falso)

• Git push è l’analogo di Check-in (falsissimo)

• Git va approcciato come uno strumento completamente nuovo senza nessun paradigma con VCS centralizzati

Page 14: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Ognuno ha un repository

Tutti i repository sono

paritari

Nello scenario più semplice

un repository è considerato

il Principale

Page 15: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Git no quando?Quando dovreste evitare di usare git

Page 16: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Siete confortevoli con il VCS attuale

Page 17: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

La struttura cartelle non è ben organizzata

Page 18: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Il team ha poco training su VCS

Page 19: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Git si quando?Quali sono i segnali che fanno capire che potreste avere bisogno di Git

Page 20: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Necessità di lavo offline locale

Page 21: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Avete abusato del branching

Page 22: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Il VCS attuale vi va stretto

Page 23: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Usate tecnologie eterogenee

Page 24: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Vale la pena provarlo?Perché potrebbe essere utile iniziare a «familiarizzare» con Git

Page 25: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Github e open source

Page 26: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Supporto a scenari misti

TFVC

SVN

Git-tf

Git svn

Page 27: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Git come «ponte» tra mondi

Team Foundation Server / ServiceTeam Project

Git TFVC

WI Build …3rd party

Local

Repo

Remote

Remote

SVNGit Svn

Git Tf

TFVC

Page 28: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Come switchareCredo che Git sia lo strumento giusto, ma come introdurlo?

Page 29: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Evitare switch immediati

Page 30: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Git-tf per acquisire familiarità

Usare Git in locale

mantenendo il

centralizzato

Page 31: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Training e progetti pilota

Page 32: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Decidere una strategia (es GitFlow)

Page 33: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Gitflow

• http://nvie.com/posts/a-successful-git-branching-model/

Page 34: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Flussi di sviluppo avanzati• https://www.atlassian.com/git/tutorials/comparing-workflows

• Git permette molti flussi di lavoro differenti

• È fortemente consigliato esaminarli attentamente prima di introdurre git nel proprio team

• Usate (se possibile) piccoli progetti reali per comparare i flussi ed acquisire familiarità

Page 35: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Git 101Una serie di informazioni «minimali» per capire meglio perché Git è differente da TFVC

Page 36: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Un utile paradigma

Git crea snapshot di una cartella

Page 37: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Una sequenza di snapshot

Commits

Ogni commit

rappresenta un

immagine della

cartella

Page 38: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Contenuto di un commit

2ab56.. ae14f.. 24d36.. 3abe5..

Foo.txt

Bar.txt

42.cs

Ptr.vcproj

Foo.txt

Bar.txt

42.cs

Ptr.vcproj

Foo.txt

Bar.txt

42.cs

Ptr.vcproj

Foo.txt

Bar.txt

42.cs

Ptr.vcproj

ID = SHA1

Bar.txt

42.cs

Foo.txt

Ptr.vcproj

Foo.txt

Bar.txt

Page 39: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Che commit è attivo ora?

802992c ab352fc b426dca 364ba23

HEAD

In ogni momento il

puntatore HEAD identifica il

commit che rappresenta il

contenuto attuale della

cartella

Page 40: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Cosa è un commit

802992c ab352fc b426dca

HEAD

Modifiche locali Staging Area

a536dbc

Page 41: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Cosa è una branch (e qui iniziamo a divertirci veramente)

802992c ab352fc b426dca

Modifiche locali Staging Area

a536dbc

HEAD master

Page 42: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

La branch «master» è un puntatore

802992c ab352fc b426dca a536dbc

HEAD master

Spostare la HEAD significa

«riprstinare» uno snapshot

Page 43: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Detatched HEAD

802992c ab352fc b426dca a536dbc

HEAD master

Una Detached HEAD è

simile ad un «get specific

version»

Da una specific version in

TFVC non potete fare un

changeset

Capitan Ovvio

Page 44: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Ma ... se … Metto un altro puntatore?

802992c ab352fc b426dca

Modifiche locali Staging Area

a536dbc

masterHEAD test

Page 45: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Con più puntatori ho più versioni

802992c ab352fc b426dca

Modifiche locali Staging Area

a536dbc

master HEAD test

abd34ea

testmaster

Page 46: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Un repository Git è un DirectedAcyclic Graph

802992c ab352fc B426dca

abd34ea

a536dbc

test

HEADmaster

Page 47: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

ConflittiCosa accade con alberi incompatibili

Page 48: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Ogni sviluppatore ha una sua master

802992c ab352fc B426dca 12ab456

802992c ab352fc B426dca ef3456

Gli sviluppatori hanno

aggiornato la master al

b426dca Ognuno ha fatto una

modifica

master

master

Page 49: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Come si condivide il codice?

802992c ab352fc B426dca 12ab456

802992c ab352fc B426dca ef3456

802992c ab352fc B426dca ef3456

Inviare le

modifiche all’origin

significa spostare i

commit binarief3456

master

master

master

Page 50: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Come si condivide il codice?

802992c ab352fc B426dca 12ab456

802992c ab352fc B426dca ef3456

802992c ab352fc B426dca ef3456

Non potete inviare

modifiche se i grafi

sono incompatibili

12ab456

master

Page 51: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Gestire il conflitto - fetch

802992c ab352fc B426dca

12ab456

ef3456

802992c ab352fc B426dca ef3456

Il primo passo è

fare un Fetch dal

server

master

origin/master

master

Page 52: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Gestire il conflitto - merge

802992c ab352fc B426dca

12ab456

ef3456

802992c ab352fc B426dca ef3456

Localmente si

effettua una merge

tra le branch

master

origin/master

fe34bd

master

Page 53: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

802992c ab352fc B426dca

12ab456

Ef3456

Gestire il conflitto – invio al server

802992c ab352fc B426dca

12ab456

Ef3456Ora si può tentare

un nuovo push al

server

master

fe34bdEf3456

origin/master

fe34bd

12ab456

master

fe34bd

Page 54: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

RebasePerché non si vive di solo pull

Page 55: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Gestire il conflitto - fetch

802992c ab352fc B426dca

12ab456

ef3456

802992c ab352fc B426dca ef3456

Il primo passo è

fare un Fetch dal

server

master

origin/master

master

Page 56: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Gestire il conflitto – and rebase

802992c ab352fc B426dca

12ab456

ef3456

802992c ab352fc B426dca ef3456

master

origin/master

master

12ab456

eb54af2

Page 57: TFS - Quale source control

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Q&ATutto il materiale di questa sessione su

http://www.communitydays.it/

Lascia il feedback su questa sessione dal sito,

potrai essere estratto per i nostri premi!

Seguici su

Twitter @CommunityDaysIT

Facebook http://facebook.com/cdaysit

#CDays14