Git, Github, and Vim

Git, Github, and Vim

a short training course for Ruby/Rails newcomer



April 06, 2013


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

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

  4. Git

  5. What's Git

  6. version control system (VCS)

  7. created by Linus Torvalds

  8. Why version control?

  9. backup just like you can load saving data while playing

    RPG game
  10. history and evidence you know whom to blame when something

    is going wrong :)
  11. Why Git

  12. free

  13. fast & smaller footprint

  14. commit v.s push

  15. easy to co-work with others

  16. Install Git

  17. on Mac: > brew install git on Ubuntu or some

    linux OS: > sudo apt-get install git-core
  18. Exercise: please install git in your machine.

  19. How to Git

  20. don't be afraid of command line tools

  21. git clone

  22. Exercise: please try to copy a project from Github or

    somewhere to your local machine.
  23. git init

  24. Exercise: please create a new directory and initialize for git

    version control.
  25. working, staging, and repository

  26. git add can add a single file or all modified

    files, even a single line.
  27. Exercise: add a new file named "hello.rb" and add to

    staging area.
  28. Exercise: after adding "hello.rb" to staging area, then try to

    modify it and see what happen?
  29. git status

  30. Exercise: try to check if "hello.rb" is in staging area,

    and then remove it from staging area.
  31. git mv

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

    to "world.rb".
  33. git commit

  34. Exercise: just commit it :)

  35. commit message matters!

  36. amend committed message

  37. Exercise: you just committed with a rubbish message, pleases amend

    it to make sense for your project.
  38. 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.
  39. Notice: empty folder won't be committed!

  40. git log

  41. Exercise: check your commit log

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

  43. git rm

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

  45. git tag

  46. Exercise: create a tag for your project

  47. git branch

  48. branching is very cheap

  49. git checkout

  50. Exercise: 1. create a new branch name "fruit" 2. checkout

    to "fruit" branch 3. add a "banana.rb" and commit it
  51. Exercise: please try to list all branches, including local and

    remote branches.
  52. Exercise: you accidentally delete the "world.rb" file, please try to

    recover it with git commands.
  53. git merge

  54. conflict?

  55. Exercise: 1. checkout back to "master" branch 2. merge "fruit"

    to "master" 3. remove "fruit" branch if you like
  56. git reset soft v.s. hard

  57. Exercise: reset a file to untracked status which you just

    added to staging.
  58. Exercise: you just merged a branch, please try reset it

    to back to un-merged branch.
  59. git pull

  60. git push

  61. git clean remove untracked files

  62. git stash apply, pop, list, clear

  63. some dotfiles

  64. .gitconfig it should locate in your home directory

  65. set your username and email > git config --global

    "eddie" > git config --global "" list all settings > git config --list
  66. make some useful aliases

  67. Exercise: 1. set your username and email for git. 2.

    edit the ".gitconfig" and add some aliases.
  68. .gitignore

  69. Reading References

  70. 1. Pro Git 2. ihower's blog

  71. Git Flow


  73. on Mac: > brew install git-flow on Ubuntu or some

    linux OS: > sudo apt-get install git-flow
  74. Exercise: please install git flow in your machine, and initialize

    a git flow project.
  75. Branches Master, Develop, Feature, Release, Hotfix

  76. add a new feature: > git flow feature start my_new_feature

    when done with the new feature: > git flow feature finish my_new_feature
  77. 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.
  78. Exercise: your boss find a bug and ask you to

    fix it ASAP, please try to do this assignment in git flow.
  79. Github

  80. What's Github?

  81. a git repository server

  82. coders' facebook :)

  83. None
  84. make friends with awesome coder :)

  85. resume for coders!

  86. Free? Price?


  88. How to Github?

  89. Exercise: register a new account on Github

  90. without password?

  91. SSH Key

  92. Exercise: generate a SSH key pair in your local machine

    and add the public key to Github
  93. Exercise: create a new repository on Github

  94. git push

  95. Exercise: upload your project to Github

  96. Exercise: 1. clone a project from Github 2. do some

    changes 3. commit and push back to Github
  97. Exercise: 1. create a new local branch 2. add some

    change and then push this branch to Github
  98. tag won't be pushed to repo by default

  99. push a tag: > git push origin v2.0 push several

    tags: > git push origin --tags
  100. Exercise: create some tags for your project and upload them

    to Github
  101. git pull

  102. Fork

  103. Pull Request

  104. 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.
  105. Github Pages

  106. host static files for FREE

  107. upload files via git commands

  108. User pages

  109. Project Pages gh-pages branch

  110. custom domain name

  111. Exercise: 1. create a github page for your account. 2.

    set your domain name in CNAME if you have one.
  112. something else?

  113. bitbucket free private repo

  114. git + dropbox

  115. Vim

  116. I'm looking for a editor..

  117. 1. launch quickly 2. easy to navigate between files 3.

    and pretty syntax highlight
  118. What's Vim?

  119. it may look a little old-fashioned

  120. but it can also be modern : )

  121. So, Why Vim?

  122. and, Why not Vim?

  123. How to Vim?

  124. Exercise: Install Vim in your machine.

  125. .vimrc

  126. 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!

  128. Modes normal, visual, and edit mode

  129. 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
  130. ESC or Ctrl + [

  131. None
  132. Exercise: launch Vim and switch between normal, visual, and edit

  133. Basic

  134. - :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.
  135. - 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 will read the source content into vim directly.
  136. Movement

  137. move cursor with h, j, k and l disable arrows

    if possible
  138. - 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.
  139. - } 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.
  140. - 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.
  141. Exercise: try to move cursor with hjkl keys, not arrow

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

  143. Exercise: try to open several files, and switch between them

    with buffer commands.
  144. Editing

  145. - 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.
  146. - 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.
  147. - 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.
  148. Plugins

  149. Pathogen nice plugin manager

  150. NERDTree A tree explorer

  151. SnipMate code snippets plugin, inspired by TextMate

  152. ctrlp Fuzzy file, buffer, mru, tag, etc finder

  153. surround.vim quoting/parenthesizing made simple

  154. powerline the ultimate vim statusline utility

  155. rails.vim Ruby on Rails power tools

  156. fugitive a git wrapper for vim

  157. vimwiki personal wiki for vim

  158. ragtag

  159. Practicing!

  160. References


  162. and more practice.. : )

  163. Tips

  164. 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.