Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dead-Simple Version Control for your Team

Dead-Simple Version Control for your Team

How we use Git and Github to build stuff at Grand Valley State University Libraries

Matthew Reidsma

July 25, 2012
Tweet

More Decks by Matthew Reidsma

Other Decks in How-to & DIY

Transcript

  1. DEAD-SIMPLE
    VERSION CONTROL
    FOR YOUR TEAM
    GIT
    WITH
    MATTHEW REIDSMA
    GRAND VALLEY STATE UNIVERSITY

    View Slide

  2. WHO DOESN’T USE
    VERSION CONTROL?

    View Slide

  3. VERSION CONTROL
    WHO?

    View Slide

  4. OH BOY.

    View Slide

  5. WHY YOU NEED
    VERSION CONTROL

    View Slide

  6. GIT

    View Slide

  7. GIT

    View Slide

  8. WHY GIT IS
    AWESOME

    View Slide

  9. HOW GIT
    WORKS

    View Slide

  10. WORKING DIRECTORY

    View Slide

  11. WORKING DIRECTORY
    INDEX (STAGING AREA)
    add

    View Slide

  12. WORKING DIRECTORY
    INDEX (STAGING AREA)
    LOCAL REPOSITORY
    add
    commit

    View Slide

  13. WORKING DIRECTORY
    INDEX (STAGING AREA)
    LOCAL REPOSITORY
    REMOTE REPOSITORY
    add
    commit
    push

    View Slide

  14. My-Computer: mreidsma$ _

    View Slide

  15. My-Computer: mreidsma$ _
    SCARY

    View Slide

  16. View Slide

  17. $cd MyAwesomeApp

    View Slide

  18. $cd MyAwesomeApp
    $touch index.html

    View Slide

  19. $cd MyAwesomeApp
    $git init
    Initialized empty Git repository in
    /MyAwesomeApp/.git/
    $touch index.html

    View Slide

  20. $cd MyAwesomeApp
    $git init
    Initialized empty Git repository in
    /MyAwesomeApp/.git/
    $git add .
    $touch index.html

    View Slide

  21. $cd MyAwesomeApp
    $git init
    Initialized empty Git repository in
    /MyAwesomeApp/.git/
    $git add .
    $git status
    # On branch master
    # Changes to be committed:
    # (use "git reset HEAD ..." to unstage)
    #
    #! new file: index.html
    #
    $touch index.html

    View Slide

  22. View Slide

  23. $git commit -m “First commit”
    [master (root-commit) 7ce2952] First commit
    1 file changed, 2 insertions(+)
    create mode 100644 index.html

    View Slide

  24. $git commit -m “First commit”
    $git remote add origin [email protected]:gvsulib/
    awesomeapp.git
    [master (root-commit) 7ce2952] First commit
    1 file changed, 2 insertions(+)
    create mode 100644 index.html

    View Slide

  25. $git commit -m “First commit”
    $git remote add origin [email protected]:gvsulib/
    awesomeapp.git
    [master (root-commit) 7ce2952] First commit
    1 file changed, 2 insertions(+)
    create mode 100644 index.html
    $git push origin master

    View Slide

  26. View Slide

  27. BRANCHING

    View Slide

  28. [master]

    View Slide

  29. [master]

    View Slide

  30. [master]

    View Slide

  31. [master]

    View Slide

  32. [master]

    View Slide

  33. [master]
    [branch]

    View Slide

  34. [master]
    [branch]

    View Slide

  35. [master]
    [branch]
    merge

    View Slide

  36. BRANCHES ARE
    CHEAP

    View Slide

  37. View Slide

  38. $cd MyAwesomeApp

    View Slide

  39. $cd MyAwesomeApp
    $git branch newFeature

    View Slide

  40. $cd MyAwesomeApp
    $git checkout newFeature
    $git branch newFeature
    Switched to branch ‘newFeature’

    View Slide

  41. $cd MyAwesomeApp
    $git checkout newFeature
    $git branch newFeature

    Switched to branch ‘newFeature’

    View Slide

  42. $cd MyAwesomeApp
    $git checkout newFeature
    $git add .
    $git branch newFeature

    Switched to branch ‘newFeature’

    View Slide

  43. $cd MyAwesomeApp
    $git checkout newFeature
    $git add .
    $git status
    # On branch newFeature
    # Changes to be committed:
    # (use "git reset HEAD ..." to unstage)
    #
    #! modified: index.html
    #
    $git branch newFeature

    Switched to branch ‘newFeature’

    View Slide

  44. View Slide

  45. $git commit -m “Best feature ever”
    [newFeature 18q7d58] Best feature ever
    1 file changed, 1 insertions(+)

    View Slide

  46. $git commit -m “Best feature ever”
    $git checkout master
    [newFeature 18q7d58] Best feature ever
    1 file changed, 1 insertions(+)
    Switched to branch ‘master’

    View Slide

  47. $git commit -m “Best feature ever”
    $git checkout master
    [newFeature 18q7d58] Best feature ever
    1 file changed, 1 insertions(+)
    $git merge newFeature
    Switched to branch ‘master’
    Updating 7ce2952..18q7d58
    index.html | 1 +
    1 file changed, 1 insertion(+)

    View Slide

  48. BUT YOU CHANGED
    THE FILE

    View Slide

  49. WORKFLOWS

    View Slide

  50. LOCAL

    View Slide

  51. LOCAL REMOTE

    View Slide

  52. LOCAL
    LOCAL

    View Slide

  53. LOCAL
    REMOTE
    LOCAL

    View Slide

  54. LOCAL
    LOCAL
    REMOTE
    WEB
    SERVER

    View Slide

  55. LOCAL
    LOCAL
    REMOTE
    WEB
    SERVER

    View Slide

  56. HOW WE DO IT @
    GVSU

    View Slide

  57. View Slide

  58. View Slide

  59. GITHUB

    View Slide

  60. GITHUB WEB
    SERVER

    View Slide

  61. MASTER IS ALWAYS
    DEPLOYABLE

    View Slide

  62. View Slide

  63. View Slide

  64. $ssh [email protected]
    $git mkdir MyAwesomeApp

    View Slide

  65. $ssh [email protected]
    $git cd MyAwesomeApp
    $git mkdir MyAwesomeApp

    View Slide

  66. $ssh [email protected]
    $git cd MyAwesomeApp
    remote: Counting objects: 1, done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 1 (delta 21), reused 1 (delta 14)
    Unpacking objects: 100% (1/1), done.
    $git mkdir MyAwesomeApp
    $git clone https://github.com/gvsulib/
    awesomeapp.git
    Cloning into awesomeapp...

    View Slide

  67. View Slide

  68. View Slide

  69. $ssh [email protected]
    $git cd MyAwesomeApp

    View Slide

  70. $ssh [email protected]
    $git cd MyAwesomeApp
    $git pull origin master

    View Slide

  71. BUT

    View Slide

  72. View Slide

  73. View Slide

  74. https://gist.github.com/3138516

    View Slide

  75. OTHER FANCY
    FEATURES

    View Slide

  76. .gitignore

    View Slide

  77. diff

    View Slide

  78. log

    View Slide

  79. filter-branch

    View Slide

  80. stash

    View Slide

  81. reset

    View Slide

  82. RESOURCES
    John Fink: A Gentle Introduction to Modern Version Control
    http://acrl.ala.org/techconnect/?p=1191
    Flashbake - automated git for writers
    http:/bitbucketlabs.net/flashbake
    Download git
    http://git-scm.com
    Git Reference
    http://gitref.org
    Git and Github Bootcamp
    http://help.github.com/articles/set-up-git

    View Slide

  83. View Slide

  84. THANK
    YOU
    [email protected]
    @mreidsma
    http://github.com/mreidsma http://github.com/gvsulib

    View Slide