Coworking with git

58
Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Coworking with git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Collaborating tips for git Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto Julien Pivotto LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp LOADays, Antwerp April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015 April 11th, 2015

Transcript of Coworking with git

Coworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with gitCoworking with git

Collaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for gitCollaborating tips for git

Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto

LOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpLOADays, AntwerpApril 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015April 11th, 2015

whoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto

• System administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.euSystem administrator at inuits.eu

• Git user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ yearsGit user for 5+ years• DevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believerDevOps believer• Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004Open-source defender since 2004• @roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie on irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/github

inuits.eu

Ops <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 DevOps <3 Dev

• Infrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as CodeInfrastructure as Code▶ SSSSSSSSSSSSSSSSSCM all the things▶ MMMMMMMMMMMMMMMMMonitoring▶ CCCCCCCCCCCCCCCCConfiguration▶ AAAAAAAAAAAAAAAAApplication deployment

• Taking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software developmentTaking part of software development▶ UUUUUUUUUUUUUUUUUnderstanding▶ MMMMMMMMMMMMMMMMMonitoring▶ HHHHHHHHHHHHHHHHHigh Availability▶ ……………………………………………

Me and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and gitMe and git

• I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)I first used subversion (10 years ago)• Private forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforgePrivate forges and sourceforge• 5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git5 years later a lot of projects moved to git• The Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot gitThe Puppet community also uses a lot git• GGGGGGGGGGGGGGGGGit/Hg are the de-facto standards in OSprojects

Git is a free and open source distributed version control systemdesigned to handle everything from small to very large projects

with speed and efficiency.

Source: http://git-scm.com/

git loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit loggit log

• Initiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus TorvaldsInitiated in 2005 by Linus Torvalds• Replacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeperReplacement of closed-source BitKeeper• Created for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel developmentCreated for the Linux Kernel development• Now used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projectsNow used by thousands of projects

git is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributedgit is distributed

• EEEEEEEEEEEEEEEEEverything can be done in local (exceptpull&push)

• WWWWWWWWWWWWWWWWWork with several remotes• SSSSSSSSSSSSSSSSShare code with anyone• NNNNNNNNNNNNNNNNNo unique central repository• AAAAAAAAAAAAAAAAA lot of workflows possible

A teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA teamA team

• OOOOOOOOOOOOOOOOOne person• 1111111111111111100 people• CCCCCCCCCCCCCCCCCoders, testers, readers?

A repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than codeA repo is more than code

• CCCCCCCCCCCCCCCCCode changes• CCCCCCCCCCCCCCCCCommit messages• DDDDDDDDDDDDDDDDDates• BBBBBBBBBBBBBBBBBranches• TTTTTTTTTTTTTTTTTags

The Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit MessageThe Commit Message

The commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit messageThe commit message

• NNNNNNNNNNNNNNNNNever underestimate the commit message• WWWWWWWWWWWWWWWWWill be seen in many occasions: git logs,cherry-picks, git blame, …

• AAAAAAAAAAAAAAAAAlways available with the repository, offline

FormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormat

• OOOOOOOOOOOOOOOOOne short line with a ticket number• <<<<<<<<<<<<<<<<<blank line>• AAAAAAAAAAAAAAAAA more complete description, with context

RebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasing

• SSSSSSSSSSSSSSSSStep 1: you pull• SSSSSSSSSSSSSSSSStep 2: you commit• SSSSSSSSSSSSSSSSStep 3: colleague push• SSSSSSSSSSSSSSSSStep 4: you pull• SSSSSSSSSSSSSSSSStep 5: you push

d705683 dce1845 7d9d95d 6cea694

dd590b4

ccb3389

85c05ba

ccb3389

Before:

d705683 dce1845 7d9d95d 6cea694

dd590b4

ccb3389

85c05ba

ccb3389

After:d705683 dce1845 7d9d95d dd590b4 6fb1d1a

rebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasing

• CCCCCCCCCCCCCCCCCleaner project history• LLLLLLLLLLLLLLLLLess commits• """""""""""""""""Single-line" commit history• gggggggggggggggggit pull --rebase

SquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashing

Daily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily workDaily work

• SSSSSSSSSSSSSSSSStep 1: code on your branch• SSSSSSSSSSSSSSSSStep 2: commit• SSSSSSSSSSSSSSSSStep 3: code again• SSSSSSSSSSSSSSSSStep 4: commit• SSSSSSSSSSSSSSSSStep 5: GOTO Step 1

What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?What do we have?

A nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changesA nice step-by-step list of changes

A big messNo one would merge that

4dd6437 8ac0fed 3092c78 f55d65e a4c8b39 2ac72a4 48e6f6f 42b3af2 b7d0830 c0cf800 7df0c0a cfe76f4

Before:4dd6437 8ac0fed 3092c78 f55d65e a4c8b39 2ac72a4 48e6f6f 42b3af2 b7d0830 c0cf800 7df0c0a cfe76f4

After:4dd6437 8ac0fed 3092c78 4fcbe28

git rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -igit rebase -i

• CCCCCCCCCCCCCCCCChanges the git history• sssssssssssssssssquash, delete, change, reorder commits• gggggggggggggggggit hashes are unique, any change changethem

The bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro codeThe bro code

Never change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatNever change commits thatare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushedare already pushed

Merge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squash

git merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squashgit merge --squash

• TTTTTTTTTTTTTTTTThe merge is done but without commits• IIIIIIIIIIIIIIIIIt allows you to commit all in once• EEEEEEEEEEEEEEEEEasily squash a temp branch in a commit

d705683 dce1845 7d9d95d 6cea694

935c8e1 bcdb4bf 2aac4c7

d705683 dce1845 7d9d95d 6cea694

2679d42

935c8e1 bcdb4bf 2aac4c7

AmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmend

git commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amendgit commit --amend

• CCCCCCCCCCCCCCCCChange the last commit• AAAAAAAAAAAAAAAAAdd files, change commit message• DDDDDDDDDDDDDDDDDo it before pushing!

Additional tips

Use SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH socketsUse SSH sockets

$ cat .ssh/configHost githost

controlmaster autocontrolpath /tmp/ssh-%r@%h:%pControlPersist 300

• UUUUUUUUUUUUUUUUUse only one SSH connection• DDDDDDDDDDDDDDDDDo not disconnect SSH

Find the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commitFind the tag of a commit

$ git name-rev --name-only 106cb38dd0bc5ea2d2d0adef0b4006bd61884e42remotes/origin/8.5.2~1

git autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrect

$ git config help.autocorrect 10$ git puskWARNING: You called a Git command named 'pusk', which does not exist.Continuing under the assumption that you meant 'push'in 1.0 seconds automatically...

GPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commitsGPG-Sign your commits

• gggggggggggggggggit commit -S• SSSSSSSSSSSSSSSSSign PR, merge commits• DDDDDDDDDDDDDDDDDo not sign every commit (then it becomesuseless)

HomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomework

• gggggggggggggggggit reflog• gggggggggggggggggit aliases• gggggggggggggggggit bisect• gggggggggggggggggit blame• FFFFFFFFFFFFFFFFFETCH_HEAD

ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion

conclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusion

• GGGGGGGGGGGGGGGGGit is powerful• AAAAAAAAAAAAAAAAAny commit can be changed• YYYYYYYYYYYYYYYYYou can do anything• AAAAAAAAAAAAAAAAA commit = A logical change• AAAAAAAAAAAAAAAAA clean history brings you easiestblame/bisect

• RRRRRRRRRRRRRRRRRemember that git is decentralized

Thank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank you

Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Any question?Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2Git workshop by @teranex 2.30pm in room2

ContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContact

Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien [email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie

inuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitshttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.eu

[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636