Towards Contributor's Heaven
     From CVS and SVN to Git



            Shawn Pearce
           Robin Rosenberg
            Matthias Sohn

                               eclipse.org/egit
What is Git?

Distributed Version Control System
Patch management


Created for the Linux Kernel

   E-mail based contributions
   Thousands of contributors

   High activity
   Parallel development
   Strong focus on code review

                                     eclipse.org/egit
Distributed Version Control
Distributed Version Control

Enables every contributor ... not just committers

Has full history ... locally

Can branch, merge, rebase ... locally

Can exchange work with others ... peer to peer

Superior branch, merge functionality




                                                    eclipse.org/egit
Distributed Version Control




                              eclipse.org/egit
Chaos?

Projects use only a subset of potential workflows
Individuals use personal workflows that others do not see

Examples:

Git   (C implementation)   All contributions are e-mailed

EGit/JGit                  All contributions via Gerrit
                           (Used to be e-mail)


Linux kernel               All contributions e-mailed
                           Subsystem maintainers also pull


                                                          eclipse.org/egit
Git Internals Crash Course

Cryptographic signatures ... ensures data integrity

Snapshot based ... saves whole project




                                                      eclipse.org/egit
Git Internals Crash Course

Cryptographic signatures ... ensures data integrity

Snapshot based ... saves whole project

History stored as graph ... accurate records




                                                      eclipse.org/egit
Git Internals Crash Course

Cryptographic signatures ... ensures data integrity

Snapshot based ... saves whole project

History stored as graph ... accurate records




Smarter merges ... makes branching cheap
                                                      eclipse.org/egit
EGit Project History
EGit Project History

2005   Linus Torvalds starts Git
2006   Proof-of-concept, quite unusable
       Not a "port", ground-up pure Java
       Originally one project




                                           eclipse.org/egit
EGit Project History

2005   Linus Torvalds starts Git
2006   Proof-of-concept, quite unusable
       Not a "port", ground-up pure Java
       Originally one project

2007   Index reader, quickdiff
       First useful minimal functionality versions




                                                     eclipse.org/egit
EGit Project History

2005   Linus Torvalds starts Git
2006   Proof-of-concept, quite unusable
       Not a "port", ground-up pure Java
       Originally one project

2007   Index reader, quickdiff
       First useful versions

2008   Add history view, commit, push/fetch
       Much more usable
       License change      ( EGit: EPL, JGit: BSD/EDL )



                                                  eclipse.org/egit
EGit Project History

2005   Linus Torvalds starts Git
2006   Proof-of-concept, quite unusable
2007   Index reader, quickdiff
2008   Add history view, commit, push/fetch

2009   >5000 downloads/month

       Split into two projects
             EGit - team provider
             JGit - reusable library

       Moved to Eclipse.org

                                              eclipse.org/egit
EGit Project History

2005   Linus Torvalds starts Git
2006   Proof-of-concept, quite unusable
2007   Index reader, quickdiff
2008   Add history view, commit, push/fetch
2009   Moved to Eclipse.org

2010 Diff/Merge
     Exit Incubation
     Release 1.0




                                              eclipse.org/egit
Why JGit Rocks
Applications Built On JGit

Open Source
 EGit                                 Eclipse Team Provider
 NBGit                               Git Support for NetBeans
 Gerrit Code Review                  Web based project management and peer code review
 Buckminster, Maven, JIRA, Hudson, ...




                                                                                         eclipse.org/jgit
Applications Built On JGit

Open Source
 EGit                                 Eclipse Team Provider
 NBGit                               Git Support for NetBeans
 Gerrit Code Review                  Web based project management and peer code review
 Buckminster, Maven, JIRA, Hudson, ...

Commercial
 TeamCity                             Commercial continuous integration
 SmartGit                             Commercial GUI client
 CodeBeamer MR                         Commercial project management




                                                                                         eclipse.org/jgit
Current State
Usable:      clone, commit, push, pull, history, diff
Missing:     merge, rebase, gc
 (use C Git command line for now ... coming soon)



Performance on par with C

More active community
Development accelerating

Eclipse integration improving




                                                        eclipse.org/egit
Quick EGit Demo


with Gerrit Code Review
Future

Standard Eclipse SCM      ... migrate from CVS/SVN
Standard Eclipse plugin    ... shipped in all packages

Complete implementation ... no C code required
Standard outside Eclipse ... BSD license is very friendly




                                                     eclipse.org/egit
Thank You


Want More?


  "Understanding and Using Git at Eclipse"

  Thursday @ 10 am
  in Stevens Creek



                                             eclipse.org/egit

EclipseCon 2010 talk: Towards contributors heaven

  • 1.
    Towards Contributor's Heaven From CVS and SVN to Git Shawn Pearce Robin Rosenberg Matthias Sohn eclipse.org/egit
  • 2.
    What is Git? DistributedVersion Control System Patch management Created for the Linux Kernel E-mail based contributions Thousands of contributors High activity Parallel development Strong focus on code review eclipse.org/egit
  • 3.
  • 4.
    Distributed Version Control Enablesevery contributor ... not just committers Has full history ... locally Can branch, merge, rebase ... locally Can exchange work with others ... peer to peer Superior branch, merge functionality eclipse.org/egit
  • 5.
  • 6.
    Chaos? Projects use onlya subset of potential workflows Individuals use personal workflows that others do not see Examples: Git (C implementation) All contributions are e-mailed EGit/JGit All contributions via Gerrit (Used to be e-mail) Linux kernel All contributions e-mailed Subsystem maintainers also pull eclipse.org/egit
  • 7.
    Git Internals CrashCourse Cryptographic signatures ... ensures data integrity Snapshot based ... saves whole project eclipse.org/egit
  • 8.
    Git Internals CrashCourse Cryptographic signatures ... ensures data integrity Snapshot based ... saves whole project History stored as graph ... accurate records eclipse.org/egit
  • 9.
    Git Internals CrashCourse Cryptographic signatures ... ensures data integrity Snapshot based ... saves whole project History stored as graph ... accurate records Smarter merges ... makes branching cheap eclipse.org/egit
  • 10.
  • 11.
    EGit Project History 2005 Linus Torvalds starts Git 2006 Proof-of-concept, quite unusable Not a "port", ground-up pure Java Originally one project eclipse.org/egit
  • 12.
    EGit Project History 2005 Linus Torvalds starts Git 2006 Proof-of-concept, quite unusable Not a "port", ground-up pure Java Originally one project 2007 Index reader, quickdiff First useful minimal functionality versions eclipse.org/egit
  • 13.
    EGit Project History 2005 Linus Torvalds starts Git 2006 Proof-of-concept, quite unusable Not a "port", ground-up pure Java Originally one project 2007 Index reader, quickdiff First useful versions 2008 Add history view, commit, push/fetch Much more usable License change ( EGit: EPL, JGit: BSD/EDL ) eclipse.org/egit
  • 14.
    EGit Project History 2005 Linus Torvalds starts Git 2006 Proof-of-concept, quite unusable 2007 Index reader, quickdiff 2008 Add history view, commit, push/fetch 2009 >5000 downloads/month Split into two projects EGit - team provider JGit - reusable library Moved to Eclipse.org eclipse.org/egit
  • 15.
    EGit Project History 2005 Linus Torvalds starts Git 2006 Proof-of-concept, quite unusable 2007 Index reader, quickdiff 2008 Add history view, commit, push/fetch 2009 Moved to Eclipse.org 2010 Diff/Merge Exit Incubation Release 1.0 eclipse.org/egit
  • 16.
  • 17.
    Applications Built OnJGit Open Source EGit Eclipse Team Provider NBGit Git Support for NetBeans Gerrit Code Review Web based project management and peer code review Buckminster, Maven, JIRA, Hudson, ... eclipse.org/jgit
  • 18.
    Applications Built OnJGit Open Source EGit Eclipse Team Provider NBGit Git Support for NetBeans Gerrit Code Review Web based project management and peer code review Buckminster, Maven, JIRA, Hudson, ... Commercial TeamCity Commercial continuous integration SmartGit Commercial GUI client CodeBeamer MR Commercial project management eclipse.org/jgit
  • 19.
    Current State Usable: clone, commit, push, pull, history, diff Missing: merge, rebase, gc (use C Git command line for now ... coming soon) Performance on par with C More active community Development accelerating Eclipse integration improving eclipse.org/egit
  • 20.
    Quick EGit Demo withGerrit Code Review
  • 21.
    Future Standard Eclipse SCM ... migrate from CVS/SVN Standard Eclipse plugin ... shipped in all packages Complete implementation ... no C code required Standard outside Eclipse ... BSD license is very friendly eclipse.org/egit
  • 22.
    Thank You Want More? "Understanding and Using Git at Eclipse" Thursday @ 10 am in Stevens Creek eclipse.org/egit