Chris Aniszczyk     Stefan Lay        Kevin Sawicki
   (Twitter)          (SAP)             (GitHub)
                                                      The Git Tutorial
                                                                   EclipseCon 2012

Matthias Sohn     Benjamin Muskalla
    (SAP)             (Tasktop)

                                                                   http://eclipse.org/jgit
                                                                  http://eclipse.org/egit
                                                        http://code.google.com/p/gerrit
Agenda

Introduction

Exercises
Setup & Cloning the Sample Repository
Local Development with EGit
Gerrit Code Review
Mylyn Integration
GitHub Eclipse Support

Q&A


       Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Git
 … a distributed revision control system built by the
 Linux project to facilitate code review
 Distributed means no central repository
● No central authority!
● Easy offline usage
● Easy to branch a project
● Protected against manipulation by cryptographic hashes



 Really good at merging
● Coordination only needed "after the fact”
● Easier to rejoin (or refresh) branches



 Structured around commits (i.e. patches)
● Tools for identifying problem commits (git bisect)
● Tools for restructuring branches w/ specific commits




              Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Git at Eclipse
 JGit is a lightweight Java library implementing Git
    http://www.eclipse.org/jgit/
 EGit is an Eclipse Team provider for Git based on JGit
    http://www.eclipse.org/egit/
 Gerrit Code Review is a Git server based on JGit
 adding permission control and review workflow
    http://code.google.com/p/gerrit

 Gerrit @ Eclipse went live
    https://git.eclipse.org/r/




             Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Eclipse is Moving to Git
CVS has been deprecated and will be retired end of 2012




Project & code repository breakdown as of 2012-03-25
http://eclipse.org/projects/scmcountdown.php

                 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn, S. Zivkov
Gerrit Code Review @ Eclipse
https://git.eclipse.org/r/ is now available for all projects                                      now used by:

                                                                                                  EGit, Jetty, JGit,
                                                                                                  Jubula, Libra, Lyo,
                                                                                                  Mylyn, Platform, R4E,
                                                                                                  Recommenders,
                                                                                                  Skalli, Tycho




                  Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn, S. Zivkov
Modern Code Review – What is it ?                                                                           Guido van Rossum [1]




 When one developer writes code, another
 developer is asked to review that code
 A careful line-by-line critique
 Happens in a non-threatening context
 Goal is cooperation, not fault-finding
 Integral part of coding process
 Otherwise this will happen:
 Debugging someone else's broken code
 – Involuntary code review: Not so good; emotions may flare


                                                      [1] http://code.google.com/p/rietveld/downloads/detail?name=Mondrian2006.pdf

           Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Code Review – Benefits                                            Guido van Rossum [1]




 Four eyes catch more bugs
   Catch bugs early to save hours of debugging

 Mentoring of new developers / contributors
   Learn from mistakes without breaking stuff

 Establish trust relationships
   Prepare for more delegation

 Good alternative to pair programming
   asynchronous and across locations

 Coding standards
   Keep overall readability & code quality high



                                                 [1] http://code.google.com/p/rietveld/downloads/detail?name=Mondrian2006.pdf


          Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit



                                           git         git
                                                 git           git

                                                                                      - verify proposed
                                                                                      changes
- clone repository                                                                    - continuous
- fetch / push changes                                                                integration builds

                       Developer PC
                    Developer PC
                                                                                            Hudson



           git
                 git




                 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit



                                                                                             git         git
                                                                                                   git         git
                                       master
                                              change 12
                                                                 submit accepted
                            change 10
                                                                 change 12
                                                         change 23




fetch master                                                                   fetch change 23
to get                         push improved
                               change 10                                       to try it
updates
                      Developer PC                                                           Developer PC




               git                                                                    git
                     git                                                                    git

                 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Local Development
with EGit



  Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit



                      git          git
                            git            git




clone repository


            Developer PC
         Developer PC




  git
        git




                 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Sample Application




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Git Exercises

1 Setup & Clone the example repository
2 Develop a feature
3 Develop 2nd feature and use staging view
4 Work on branches in parallel
5 Fetch the latest state
6 Merging, Rebasing, Resolving Conflicts


              Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Git Exercises

7 History view
8 Reset branch to previous state
9 Change a series of commits
10 Git blame
11 Stash
12 Submodules



               Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit Code Review




 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
Server managing central Git repositories
                                      Gerrit




             Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
         Access Control

                                  Gerrit




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
                Access Control

                                         Gerrit


     git push




                Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
         Access Control

                                  Gerrit




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
         Access Control

                                  Gerrit




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
          Code Review

                                  Gerrit




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
                    Code Review

                                         Gerrit
         git push




                Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
                     Code Review

                                             Gerrit
         git push




                    Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
                     Code Review

                                             Gerrit
         git push <for_review>




                    Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
           Commenting




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
         Discussing & Improving




             Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
                     Voting




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit
Do not miss:

Talk by Shawn Pearce (Gerrit founder and Project Lead)



   Harnessing Peer Code Reviews

   Wednesday, 14:15, Ballroom A




                  Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
http://git.eclipse.org/r/

                                                   Gerrit



                                           git         git
                                                 git           git
                                                                                      - verify proposed
                                                                                      changes
                                                                                      - continuous
- clone repository                                                                    integration builds
- fetch / push changes
                       Developer PC
                    Developer PC

                                                                                             Hudson


           git
                 git




                 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Gerrit Exercises

1 Configure push to Gerrit
2 Push change to Gerrit
3 Review change
4 Improve a change
5 Submit a change to the codebase
6 View Gerrit review notes
7 Starting Demo Gerrit Server (backup)

             Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Mylyn Integration




   Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
90% Irrelevant




Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Task-focused IDE




Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
< Demo >



Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Exercises: Mylyn Integration
1 Mylyn / EGit Integration




        Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Exercises: Mylyn Integration
2 Use Gerrit from within the IDE




       Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Exercises: Mylyn Integration

1 Mylyn / EGit Integration

2 Use Gerrit from within the IDE




Related talk
Wednesday, 1:30PM - 2:15PM
Build, Stage, Review, Merge: Task-focused Development the Eclipse
Mylyn Way


           Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
GitHub Eclipse Support




   Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
GitHub Eclipse Support
●   https://github.com/eclipse
       ○ 248 mirrored repositories

●   Browsing source code
●   Comparing branches and tags
●   Activity feeds
●   Charts & graphs
●   Downloading snapshots




           Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
GitHub Eclipse Support
GitHub EGit Integration
   GitHub Mylyn Connector
      Issues
      Gists
      Pull Requests
      Import Wizard
   GitHub Java API
      Maven plugins
      Reporting
      Automating tasks




         Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
GitHub Exercises: EGit Integration

1 Setup Share on GitHub




       Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Q&A



 Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
Give Feedback on the Sessions

1   Sign In: www.eclipsecon.org




2   Select Session Evaluate




3   Vote

The Git Tutorial - EclipseCon 2012

  • 1.
    Chris Aniszczyk Stefan Lay Kevin Sawicki (Twitter) (SAP) (GitHub) The Git Tutorial EclipseCon 2012 Matthias Sohn Benjamin Muskalla (SAP) (Tasktop) http://eclipse.org/jgit http://eclipse.org/egit http://code.google.com/p/gerrit
  • 2.
    Agenda Introduction Exercises Setup & Cloningthe Sample Repository Local Development with EGit Gerrit Code Review Mylyn Integration GitHub Eclipse Support Q&A Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 3.
    Git … adistributed revision control system built by the Linux project to facilitate code review Distributed means no central repository ● No central authority! ● Easy offline usage ● Easy to branch a project ● Protected against manipulation by cryptographic hashes Really good at merging ● Coordination only needed "after the fact” ● Easier to rejoin (or refresh) branches Structured around commits (i.e. patches) ● Tools for identifying problem commits (git bisect) ● Tools for restructuring branches w/ specific commits Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 4.
    Git at Eclipse JGit is a lightweight Java library implementing Git http://www.eclipse.org/jgit/ EGit is an Eclipse Team provider for Git based on JGit http://www.eclipse.org/egit/ Gerrit Code Review is a Git server based on JGit adding permission control and review workflow http://code.google.com/p/gerrit Gerrit @ Eclipse went live https://git.eclipse.org/r/ Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 5.
    Eclipse is Movingto Git CVS has been deprecated and will be retired end of 2012 Project & code repository breakdown as of 2012-03-25 http://eclipse.org/projects/scmcountdown.php Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn, S. Zivkov
  • 6.
    Gerrit Code Review@ Eclipse https://git.eclipse.org/r/ is now available for all projects now used by: EGit, Jetty, JGit, Jubula, Libra, Lyo, Mylyn, Platform, R4E, Recommenders, Skalli, Tycho Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn, S. Zivkov
  • 7.
    Modern Code Review– What is it ? Guido van Rossum [1] When one developer writes code, another developer is asked to review that code A careful line-by-line critique Happens in a non-threatening context Goal is cooperation, not fault-finding Integral part of coding process Otherwise this will happen: Debugging someone else's broken code – Involuntary code review: Not so good; emotions may flare [1] http://code.google.com/p/rietveld/downloads/detail?name=Mondrian2006.pdf Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 8.
    Code Review –Benefits Guido van Rossum [1] Four eyes catch more bugs Catch bugs early to save hours of debugging Mentoring of new developers / contributors Learn from mistakes without breaking stuff Establish trust relationships Prepare for more delegation Good alternative to pair programming asynchronous and across locations Coding standards Keep overall readability & code quality high [1] http://code.google.com/p/rietveld/downloads/detail?name=Mondrian2006.pdf Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 9.
    Gerrit git git git git - verify proposed changes - clone repository - continuous - fetch / push changes integration builds Developer PC Developer PC Hudson git git Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 10.
    Gerrit git git git git master change 12 submit accepted change 10 change 12 change 23 fetch master fetch change 23 to get push improved change 10 to try it updates Developer PC Developer PC git git git git Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 11.
    Local Development with EGit Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 12.
    Gerrit git git git git clone repository Developer PC Developer PC git git Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 13.
    Sample Application Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 14.
    Git Exercises 1 Setup& Clone the example repository 2 Develop a feature 3 Develop 2nd feature and use staging view 4 Work on branches in parallel 5 Fetch the latest state 6 Merging, Rebasing, Resolving Conflicts Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 15.
    Git Exercises 7 Historyview 8 Reset branch to previous state 9 Change a series of commits 10 Git blame 11 Stash 12 Submodules Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 16.
    Gerrit Code Review Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 17.
    Gerrit Server managing centralGit repositories Gerrit Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 18.
    Gerrit Access Control Gerrit Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 19.
    Gerrit Access Control Gerrit git push Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 20.
    Gerrit Access Control Gerrit Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 21.
    Gerrit Access Control Gerrit Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 22.
    Gerrit Code Review Gerrit Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 23.
    Gerrit Code Review Gerrit git push Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 24.
    Gerrit Code Review Gerrit git push Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 25.
    Gerrit Code Review Gerrit git push <for_review> Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 26.
    Gerrit Commenting Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 27.
    Gerrit Discussing & Improving Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 28.
    Gerrit Voting Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 29.
    Gerrit Do not miss: Talkby Shawn Pearce (Gerrit founder and Project Lead) Harnessing Peer Code Reviews Wednesday, 14:15, Ballroom A Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 30.
    http://git.eclipse.org/r/ Gerrit git git git git - verify proposed changes - continuous - clone repository integration builds - fetch / push changes Developer PC Developer PC Hudson git git Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 31.
    Gerrit Exercises 1 Configurepush to Gerrit 2 Push change to Gerrit 3 Review change 4 Improve a change 5 Submit a change to the codebase 6 View Gerrit review notes 7 Starting Demo Gerrit Server (backup) Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 32.
    Mylyn Integration Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 33.
    90% Irrelevant Copyright ©C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 34.
    Task-focused IDE Copyright ©C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 35.
    < Demo > Copyright© C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 36.
    Exercises: Mylyn Integration 1Mylyn / EGit Integration Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 37.
    Exercises: Mylyn Integration 2Use Gerrit from within the IDE Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 38.
    Exercises: Mylyn Integration 1Mylyn / EGit Integration 2 Use Gerrit from within the IDE Related talk Wednesday, 1:30PM - 2:15PM Build, Stage, Review, Merge: Task-focused Development the Eclipse Mylyn Way Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 39.
    GitHub Eclipse Support Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 40.
    GitHub Eclipse Support ● https://github.com/eclipse ○ 248 mirrored repositories ● Browsing source code ● Comparing branches and tags ● Activity feeds ● Charts & graphs ● Downloading snapshots Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 41.
  • 42.
    GitHub EGit Integration GitHub Mylyn Connector Issues Gists Pull Requests Import Wizard GitHub Java API Maven plugins Reporting Automating tasks Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 43.
    GitHub Exercises: EGitIntegration 1 Setup Share on GitHub Copyright © C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 44.
    Q&A Copyright ©C. Aniszczyk, S. Lay, B. Muskalla, K. Sawicki, M. Sohn
  • 45.
    Give Feedback onthe Sessions 1 Sign In: www.eclipsecon.org 2 Select Session Evaluate 3 Vote