Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Coworking with git

2,083 views

Published on

This talk given at LOADays 2015 is not an introduction to git, but shows some more advanced techniques useful when working with several people.

Those techniques include rebasing, squashing, branching. I also give some other advices and best practices around git.

Published in: Technology
  • Be the first to comment

Coworking with git

  1. 1. 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, Antwerp April 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
  2. 2. whoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoamiwhoami Julien 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
  3. 3. inuits.eu
  4. 4. 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 ▶ ……………………………………………
  5. 5. 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 OS projects
  6. 6. Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Source: http://git-scm.com/
  7. 7. 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
  8. 8. 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 (except pull&push) • WWWWWWWWWWWWWWWWWork with several remotes • SSSSSSSSSSSSSSSSShare code with anyone • NNNNNNNNNNNNNNNNNo unique central repository • AAAAAAAAAAAAAAAAA lot of workflows possible
  9. 9. 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?
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. FormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormatFormat • OOOOOOOOOOOOOOOOOne short line with a ticket number • <<<<<<<<<<<<<<<<<blank line> • AAAAAAAAAAAAAAAAA more complete description, with context
  14. 14. RebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasingRebasing
  15. 15. • SSSSSSSSSSSSSSSSStep 1: you pull • SSSSSSSSSSSSSSSSStep 2: you commit • SSSSSSSSSSSSSSSSStep 3: colleague push • SSSSSSSSSSSSSSSSStep 4: you pull • SSSSSSSSSSSSSSSSStep 5: you push
  16. 16. d705683 dce1845 7d9d95d 6cea694 dd590b4 ccb3389 85c05ba ccb3389
  17. 17. Before: d705683 dce1845 7d9d95d 6cea694 dd590b4 ccb3389 85c05ba ccb3389 After: d705683 dce1845 7d9d95d dd590b4 6fb1d1a
  18. 18. rebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasingrebasing • CCCCCCCCCCCCCCCCCleaner project history • LLLLLLLLLLLLLLLLLess commits • """""""""""""""""Single-line" commit history • gggggggggggggggggit pull --rebase
  19. 19. SquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashingSquashing
  20. 20. 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
  21. 21. 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 mess No one would merge that
  22. 22. 4dd6437 8ac0fed 3092c78 f55d65e a4c8b39 2ac72a4 48e6f6f 42b3af2 b7d0830 c0cf800 7df0c0a cfe76f4
  23. 23. Before: 4dd6437 8ac0fed 3092c78 f55d65e a4c8b39 2ac72a4 48e6f6f 42b3af2 b7d0830 c0cf800 7df0c0a cfe76f4 After: 4dd6437 8ac0fed 3092c78 4fcbe28
  24. 24. 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 change them
  25. 25. 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 that are 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
  26. 26. Merge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squashMerge –squash
  27. 27. 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
  28. 28. d705683 dce1845 7d9d95d 6cea694 935c8e1 bcdb4bf 2aac4c7
  29. 29. d705683 dce1845 7d9d95d 6cea694 2679d42 935c8e1 bcdb4bf 2aac4c7
  30. 30. AmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmendAmend
  31. 31. 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!
  32. 32. Additional tips
  33. 33. 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/config Host githost controlmaster auto controlpath /tmp/ssh-%r@%h:%p ControlPersist 300 • UUUUUUUUUUUUUUUUUse only one SSH connection • DDDDDDDDDDDDDDDDDo not disconnect SSH
  34. 34. 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 106cb38dd0bc5ea2d2d0adef0b40 06bd61884e42 remotes/origin/8.5.2~1
  35. 35. git autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrectgit autocorrect $ git config help.autocorrect 10 $ git pusk WARNING: You called a Git command named 'pusk', which does not Continuing under the assumption that you meant 'push' in 1.0 seconds automatically...
  36. 36. 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 becomes useless)
  37. 37. HomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomeworkHomework • gggggggggggggggggit reflog • gggggggggggggggggit aliases • gggggggggggggggggit bisect • gggggggggggggggggit blame • FFFFFFFFFFFFFFFFFETCH_HEAD
  38. 38. ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion
  39. 39. conclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusionconclusion • GGGGGGGGGGGGGGGGGit is powerful • AAAAAAAAAAAAAAAAAny commit can be changed • YYYYYYYYYYYYYYYYYou can do anything • AAAAAAAAAAAAAAAAA commit = A logical change • AAAAAAAAAAAAAAAAA clean history brings you easiest blame/bisect • RRRRRRRRRRRRRRRRRemember that git is decentralized
  40. 40. 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
  41. 41. ContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContact Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto julien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eu @roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie inuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuits https://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 info@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.eu +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

×