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

Git, Github, and Vim

Git, Github, and Vim

a short training course for Ruby/Rails newcomer

高見龍

April 06, 2013
Tweet

More Decks by 高見龍

Other Decks in Programming

Transcript

  1. Ruby/Rails training course
    Git, Github, and Vim
    eddie@fju

    View full-size slide

  2. Current Status
    80% iOS app, 20% Ruby/Rails

    View full-size slide

  3. version control system (VCS)

    View full-size slide

  4. created by Linus Torvalds

    View full-size slide

  5. Why version control?

    View full-size slide

  6. backup
    just like you can load saving data while playing RPG game

    View full-size slide

  7. history and evidence
    you know whom to blame when something is going wrong :)

    View full-size slide

  8. fast & smaller footprint

    View full-size slide

  9. commit v.s push

    View full-size slide

  10. easy to co-work with others

    View full-size slide

  11. on Mac:
    > brew install git
    on Ubuntu or some linux OS:
    > sudo apt-get install git-core

    View full-size slide

  12. Exercise:
    please install git in your machine.

    View full-size slide

  13. don't be afraid of command line tools

    View full-size slide

  14. Exercise:
    please try to copy a project from Github or
    somewhere to your local machine.

    View full-size slide

  15. Exercise:
    please create a new directory and initialize
    for git version control.

    View full-size slide

  16. working, staging, and repository

    View full-size slide

  17. git add
    can add a single file or all modified files, even a single line.

    View full-size slide

  18. Exercise:
    add a new file named "hello.rb" and add to
    staging area.

    View full-size slide

  19. Exercise:
    after adding "hello.rb" to staging area, then
    try to modify it and see what happen?

    View full-size slide

  20. Exercise:
    try to check if "hello.rb" is in staging area, and
    then remove it from staging area.

    View full-size slide

  21. Exercise:
    add "hello.rb" to staging area, and then
    rename it to "world.rb".

    View full-size slide

  22. Exercise:
    just commit it :)

    View full-size slide

  23. commit message matters!

    View full-size slide

  24. amend committed message

    View full-size slide

  25. Exercise:
    you just committed with a rubbish message,
    pleases amend it to make sense for your
    project.

    View full-size slide

  26. Exercise:
    in last commit, you forgot to add another file,
    but you don't want to commit again just for
    this single file, please try to commit it with --
    amend.

    View full-size slide

  27. Notice:
    empty folder won't be committed!

    View full-size slide

  28. Exercise:
    check your commit log

    View full-size slide

  29. Exercise:
    modify something in the "world.rb" then
    commit again.

    View full-size slide

  30. Exercise:
    remove a file and then checkout it back.

    View full-size slide

  31. Exercise:
    create a tag for your project

    View full-size slide

  32. branching is very cheap

    View full-size slide

  33. git checkout

    View full-size slide

  34. Exercise:
    1. create a new branch name "fruit"
    2. checkout to "fruit" branch
    3. add a "banana.rb" and commit it

    View full-size slide

  35. Exercise:
    please try to list all branches, including local
    and remote branches.

    View full-size slide

  36. Exercise:
    you accidentally delete the "world.rb" file,
    please try to recover it with git commands.

    View full-size slide

  37. Exercise:
    1. checkout back to "master" branch
    2. merge "fruit" to "master"
    3. remove "fruit" branch if you like

    View full-size slide

  38. git reset
    soft v.s. hard

    View full-size slide

  39. Exercise:
    reset a file to untracked status which you just
    added to staging.

    View full-size slide

  40. Exercise:
    you just merged a branch, please try reset it
    to back to un-merged branch.

    View full-size slide

  41. git clean
    remove untracked files

    View full-size slide

  42. git stash
    apply, pop, list, clear

    View full-size slide

  43. some dotfiles

    View full-size slide

  44. .gitconfig
    it should locate in your home directory

    View full-size slide

  45. set your username and email
    > git config --global user.name "eddie"
    > git config --global user.email "[email protected]"
    list all settings
    > git config --list

    View full-size slide

  46. make some useful aliases

    View full-size slide

  47. Exercise:
    1. set your username and email for git.
    2. edit the ".gitconfig" and add some aliases.

    View full-size slide

  48. .gitignore
    https://github.com/github/gitignore

    View full-size slide

  49. Reading References

    View full-size slide

  50. 1. Pro Git
    2. ihower's blog http://ihower.tw/git/

    View full-size slide

  51. http://nvie.com/posts/a-successful-git-branching-model/

    View full-size slide

  52. on Mac:
    > brew install git-flow
    on Ubuntu or some linux OS:
    > sudo apt-get install git-flow
    https://github.com/nvie/gitflow/wiki/Installation

    View full-size slide

  53. Exercise:
    please install git flow in your machine, and
    initialize a git flow project.

    View full-size slide

  54. Branches
    Master, Develop, Feature, Release, Hotfix

    View full-size slide

  55. add a new feature:
    > git flow feature start my_new_feature
    when done with the new feature:
    > git flow feature finish my_new_feature

    View full-size slide

  56. Exercise:
    your boss ask you to add a new feature which
    can let user upload their photos, please try to
    finish this assignment in git flow.

    View full-size slide

  57. Exercise:
    your boss find a bug and ask you to fix it
    ASAP, please try to do this assignment in git
    flow.

    View full-size slide

  58. What's Github?

    View full-size slide

  59. a git repository server

    View full-size slide

  60. coders' facebook :)

    View full-size slide

  61. make friends with awesome coder :)

    View full-size slide

  62. resume for coders!

    View full-size slide

  63. Free? Price?

    View full-size slide

  64. SSH/HTTPS/GIT

    View full-size slide

  65. How to Github?

    View full-size slide

  66. Exercise:
    register a new account on Github

    View full-size slide

  67. without password?

    View full-size slide

  68. Exercise:
    generate a SSH key pair in your local
    machine and add the public key to Github

    View full-size slide

  69. Exercise:
    create a new repository on Github

    View full-size slide

  70. Exercise:
    upload your project to Github

    View full-size slide

  71. Exercise:
    1. clone a project from Github
    2. do some changes
    3. commit and push back to Github

    View full-size slide

  72. Exercise:
    1. create a new local branch
    2. add some change and then push this
    branch to Github

    View full-size slide

  73. tag won't be pushed to repo by default

    View full-size slide

  74. push a tag:
    > git push origin v2.0
    push several tags:
    > git push origin --tags

    View full-size slide

  75. Exercise:
    create some tags for your project and upload
    them to Github

    View full-size slide

  76. Pull Request

    View full-size slide

  77. Exercise:
    1. fork a project from your classmate who is
    sitting just next to you.
    2. add some change and commit.
    3. fire a pull request.

    View full-size slide

  78. Github Pages

    View full-size slide

  79. host static files for FREE

    View full-size slide

  80. upload files via git commands

    View full-size slide

  81. User pages
    kaochenlong.github.io

    View full-size slide

  82. Project Pages
    gh-pages branch

    View full-size slide

  83. custom domain name

    View full-size slide

  84. Exercise:
    1. create a github page for your account.
    2. set your domain name in CNAME if you
    have one.

    View full-size slide

  85. something else?

    View full-size slide

  86. bitbucket
    free private repo

    View full-size slide

  87. git + dropbox

    View full-size slide

  88. I'm looking for a editor..

    View full-size slide

  89. 1. launch quickly
    2. easy to navigate between files
    3. and pretty syntax highlight

    View full-size slide

  90. it may look a little old-fashioned

    View full-size slide

  91. but it can also be modern : )

    View full-size slide

  92. So, Why Vim?

    View full-size slide

  93. and, Why not Vim?

    View full-size slide

  94. Exercise:
    Install Vim in your machine.
    http://www.vim.org/download.php

    View full-size slide

  95. if you want to use my .vimrc
    1. clone from my Github repo
    2. cd to cloned repo and execute install script
    3. make symbolic link for vim
    4. done!

    View full-size slide

  96. https://github.com/kaochenlong/eddie-vim

    View full-size slide

  97. Modes
    normal, visual, and edit mode

    View full-size slide

  98. Modes Switch:
    1. in normal mode, "i" or "a" or "o" to enter insert mode(i
    = insert, a = append, o = newline)
    2. in insert mode, ESC or Ctrl+[ to enter normal mode
    3. in normal mode, hit "v" or "V" to enter visual mode
    4. in visual mode, hit ESC or Ctrl+[ to normal mode

    View full-size slide

  99. ESC or Ctrl + [

    View full-size slide

  100. Exercise:
    launch Vim and switch between normal,
    visual, and edit mode.

    View full-size slide

  101. - :w write to file.
    - :q exit Vim.
    - :tabe create a new tab.
    - gt to switch to next tab, gT to previous tab. (I map
    gt and gT to F7 and F8 in my vimrc)
    - :new to create a horizontal split window, :vnew
    or :vs to create a vertical split window.

    View full-size slide

  102. - vi -o a.rb b.rb to open those two files at the same
    time with horizontal split window.
    - vi -O a.rb b.rb same as above, but in vertical split
    window.
    - vi -p a.rb b.rb to open files with tabs.
    - vi http://www.eddie.com.tw will read the source
    content into vim directly.

    View full-size slide

  103. move cursor with h, j, k and l
    disable arrows if possible

    View full-size slide

  104. - w or W to move cursor forward by a word, and b or
    B is backward.
    - 0 to back to the begin of the line, and $ is jump to
    the end.
    - fx will stop the cursor at the next "x" character in
    current line, and F is search backward.

    View full-size slide

  105. - } will move cursor to next section, { move to last
    section.
    - vit will visually select content between the tag,
    while vat will even including the tag.
    - vi" will visually select content between current
    double quotes.
    - viw will select the current word.

    View full-size slide

  106. - gg will move the cursor to the top of the current
    file, and G will jump to bottom.
    - zz, zb, zt
    - / search, n can jump to next matched result, and N
    will jump to last one.
    - * search the word on cursor.

    View full-size slide

  107. Exercise:
    try to move cursor with hjkl keys, not arrow
    keys.

    View full-size slide

  108. Buffers
    :ls, :bd, :b3, :b filename, :tab ba

    View full-size slide

  109. Exercise:
    try to open several files, and switch between
    them with buffer commands.

    View full-size slide

  110. - D to clear all content of current line after the
    cursor.
    - C like D, but enter insert mode.
    - dG will clear all content after the cursor, dgg will
    clear all content before the cursor.
    - x remove a character.
    - . to repeat last action.
    - dd to delete whole line.
    - 3dd to delete 3 lines.

    View full-size slide

  111. - yy yank the whole line of the cursor.
    - 3yy yank 3 lines.
    - p paste content from register.
    - 4p paster content from register for 4 times.
    - = re-format
    - gg=G re-format whole file.

    View full-size slide

  112. - dw, diw to delete the word in the cursor.
    - cw, ciw same as above, but enter insert mode.
    - r to replace current character.
    - J to concatenate current line with next line, 3J will
    concatenate next 3 lines.
    - > to add indentation, < to remove indentation.

    View full-size slide

  113. Pathogen
    nice plugin manager
    https://github.com/tpope/vim-pathogen

    View full-size slide

  114. NERDTree
    A tree explorer
    https://github.com/scrooloose/nerdtree

    View full-size slide

  115. SnipMate
    code snippets plugin, inspired by TextMate
    https://github.com/msanders/snipmate.vim

    View full-size slide

  116. ctrlp
    Fuzzy file, buffer, mru, tag, etc finder
    https://github.com/kien/ctrlp.vim

    View full-size slide

  117. surround.vim
    quoting/parenthesizing made simple
    https://github.com/tpope/vim-surround

    View full-size slide

  118. powerline
    the ultimate vim statusline utility
    https://github.com/Lokaltog/vim-powerline

    View full-size slide

  119. rails.vim
    Ruby on Rails power tools
    https://github.com/tpope/vim-rails

    View full-size slide

  120. fugitive
    a git wrapper for vim
    https://github.com/tpope/vim-fugitive

    View full-size slide

  121. vimwiki
    personal wiki for vim
    https://github.com/vim-scripts/vimwiki

    View full-size slide

  122. ragtag
    https://github.com/tpope/vim-ragtag

    View full-size slide

  123. http://blog.eddie.com.tw/screencasts/

    View full-size slide

  124. and more practice.. : )

    View full-size slide

  125. in terminal:
    1. ctrl + z to stash vim, and type "fg" to bring it back.
    2. ctrl + w to delete a word, ctrl + u to delete a whole
    line, both work in terminal and vim edit mode.
    3. ctrl + r to find history commands fuzzily.

    View full-size slide