Git and Github

33,393 views
33,006 views

Published on

7 Comments
125 Likes
Statistics
Notes
  • Pro Git --- http://amzn.to/1RsRDKI
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Version Control with Git: Powerful tools and techniques for collaborative software development --- http://amzn.to/22qrnWK
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Ry's Git Tutorial --- http://amzn.to/25cZS1F
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • please checkout the new version: http://www.slideshare.net/ihower/git-tutorial-13695342
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • greate
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
33,393
On SlideShare
0
From Embeds
0
Number of Embeds
13,137
Actions
Shares
0
Downloads
1,087
Comments
7
Likes
125
Embeds 0
No embeds

No notes for slide

Git and Github

  1. 1. Git and GitHub ihower@gmail.com 2011/3 CC BY-NC-SA 3.0 Pro Git
  2. 2. ?• a.k.a. ihower • http://ihower.tw • http://twitter.com/ihower• Ruby on Rails Developer since 2006• The organizer of Ruby Taiwan Community • http://ruby.tw 2
  3. 3. Agenda‧1. DVCS‧2. Git‧3. Git‧4. Github‧5. Git 3
  4. 4. ‧2002 ( copy )‧2005 SubVersion‧2007 SVK‧2008 Git ( SVN push/pull)‧2009 Git ( master feature branches)‧2011 Git ( git flow topic branch rebase) 4
  5. 5. 1. DVCS ? 5
  6. 6. Version Control System‧ repository‧‧‧Branch( )‧Tag( ) 6
  7. 7. Local VCScopy paste , rcs 7
  8. 8. Local VCScopy paste , rcs 7
  9. 9. Centralized VCS CVS, Subversion, Perforce 8
  10. 10. Centralized VCS CVS, Subversion, Perforce 1. 2. Single point of failure 8
  11. 11. Distributed VCS Git, Mercurial(Hg), Bazaar 9
  12. 12. Distributed VCS Git, Mercurial(Hg), Bazaar workflows ! 9
  13. 13. Local development‧ CSV commit history log‧ CSV commit history log 10
  14. 14. 2. Git ? 11
  15. 15. Git‧ Linux Torvalds (Linux creator)‧ Linux Kernel‧2005/4 2005/6 Linix Kernel 2005/12 1.0 12
  16. 16. Git?‧Git ‧Qt‧Linux Kernel ‧Ruby on Rails‧Perl ‧Android‧Eclipse ‧PostgreSQL‧Gnome ‧Debian‧KDE ‧X.org 13
  17. 17. other VCS way 14
  18. 18. Git Way metadata snapshots 15
  19. 19. Git Way metadata snapshots I’m a mini filesystem! Not just VCS. 15
  20. 20. Git Way metadata snapshots I’m a mini filesystem! Not just VCS. Apple Time Machine ! 15
  21. 21. : Working tree/Staging area/Repository 16
  22. 22. Why Git is Better than X http://zh-tw.whygitisbetterthanx.com‧‧‧Git‧Git‧Staging‧‧‧ GitHub!
  23. 23. Git SVN‧svn merge branch branch‧svn log‧svn commit checkout commit 18
  24. 24. 3-1. Git 19
  25. 25. Install‧ Git http://help.github.com/set-up-git-redirect‧ Git GUI(optional) GitX (Mac) TortoiseGit/Git Extensions (Windows) qgit (Linux)‧ SSH Key ssh-keygen -t rsa -C "your_email@youremail.com" 20
  26. 26. Setup‧ ~/.gitconfig‧git config --global user.name "Your Name"‧git config --global user.email "your@email.com"‧git config --global color.ui true‧git config --global core.editor "mate -w" (Textmate) 21
  27. 27. Setup (Windows only)‧‧git config --global core.autocrlf true‧git config --global core.safecrlf true 22
  28. 28. Repository‧mkdir sandbox‧cd sandbox‧git init 23
  29. 29. Repository‧SSH git clone git@github.com:ihower/sandbox.git‧HTTP/HTTPS git clone https://ihower@github.com/ihower/sandbox.git‧ Git protocol ( ) git clone git://github.com/ihower/sandbox.git‧File ( Dropbox git init --bare --shared !! Crazy!!) git clone file://path/to/repo.git 24
  30. 30. commit‧touch README‧git add README‧git status‧git commit -m “First Commit” 25
  31. 31. ‧ README‧git status‧git diff‧git add . ( !)‧git status‧git diff --cached‧git commit -m “Update README” 26
  32. 32. Staging commit‧touch a.rb‧touch b.rb‧git add a.rb‧git commit “Update a”‧git add b.rb‧git commit “Update b” 27
  33. 33. ‧git rm a.rb‧git mv b.rb c.rb‧git add .‧git commit “Remove a, Rename b to c”‧ copy ? Git cp 28
  34. 34. commitUntracked files Changes not Changes to be staged for commit committed 29
  35. 35. ‧git log‧git log --oneline‧git log --oneline --decorate --graph‧ GUI 30
  36. 36. ‧ .gitignore ( commit )‧ ~/.gitignore ( Global )‧ commit .gitkeep‧.gitignore https://github.com/github/gitignore 31
  37. 37. commit ?‧tmp/*‧log/*‧ ( )‧‧build/* compile‧.DS_Store‧Thumbs.rb 32
  38. 38. Commit‧ / / bug fixed unit test commit commit commit‧git diff --check‧commit 33
  39. 39. 3-2. Git 34
  40. 40. Branch ?‧topic feature‧Bug fixes‧ (refactor)‧ 35
  41. 41. branch‧git branch new_feature‧git branch‧git checkout new_feature‧touch new_feature.rb‧git add new_feature.rb‧git commit -m “New feature” 36
  42. 42. branch‧git branch new_feature‧git branch‧git checkout new_feature‧touch new_feature.rb‧git add new_feature.rb‧git commit -m “New feature” checkout working tree 36
  43. 43. branch‧git checkout master‧git merge new_feature 37
  44. 44. 38
  45. 45. (master) git branch iss53 39
  46. 46. (iss53) git commit 40
  47. 47. (master) git branch hotfix (hotfix) git commit 41
  48. 48. (master) git merge hotfix 42
  49. 49. (master) git merge hotfix fast-forward 42
  50. 50. (iss53) git commit 43
  51. 51. (master) git merge iss53 44
  52. 52. (master) git merge iss53 C6 merge commit 44
  53. 53. ‧Straight merge branch commits merge commit Parents fast-forward merge commit --no-ff 45
  54. 54. (cont.)‧Squashed commit git merge new_feature --squash merge-commit log SVN merge‧cherry-pick git cherry-pick 714cba commit 46
  55. 55. branch‧ working tree branch staging area modified‧ commit push reset‧ stash git stash git stash apply git stash clear 47
  56. 56. 3-3. Git push 48
  57. 57. push branch ...‧ SVN Git Commit commit logs!! commits commit commit commits commits 49
  58. 58. reset ( commit )‧git reset e37c75787‧git reset HEAD^ ( working tree)‧git reset HEAD^ --soft ( staging area)‧git reset HEAD^ --hard ( ) 50
  59. 59. revert ( commit )‧ reset revert commit‧git revert e37c75787‧git revert HEAD^ 51
  60. 60. rebase ( commit )‧git rebase -i e37c7578pick 048b59e first commitpick 995dbb3 change somethingpick aa3e16e changed# Rebase 0072886..1b6475f onto 0072886## Commands:# p, pick = use commit# r, reword = use commit, but edit the commit message# e, edit = use commit, but stop for amending# s, squash = use commit, but meld into previous commit# f, fixup = like "squash", but discard this commits log message# x, exec = run command (the rest of the line) using shell## If you remove a line here THAT COMMIT WILL BE LOST.# However, if you remove everything, the rebase will be aborted. 52
  61. 61. : rebase‧rebase ( local branch) 1. branch 2. branch commits apply/patch commit log local branch 53
  62. 62. : new_feature master D---E new_feature /A---B---C---F master 54
  63. 63. merge(new_feature) git merge master D--------E / A---B---C---F----G new_feature master 55
  64. 64. rebase G !(new_feature) git rebase master A---B---C---F---D---E new_feature master 56
  65. 65. rebase G !(new_feature) git rebase master A---B---C---F---D---E new_feature master merge commit 56
  66. 66. push commits push !! 57
  67. 67. rebase + merge ( feature branch develop)‧ feature branch merge feature branch typo commit feature branch commits‧ feature branch git rebase develop -i ( ) git rebase -i develop branch git merge feature --no-ff 58
  68. 68. mergecommit 59
  69. 69. (1)‧ --no-ff merge commit fast-forward‧rebase feature branch push‧ feature branch 60
  70. 70. (2)‧ rebase conflict‧ rebase branch rebase 61
  71. 71. 4. Github ? 62
  72. 72. =
  73. 73. GitHub?‧twitter ‧jQuery‧facebook ‧YUI 3‧rackspace ‧mootools‧digg ‧Ruby on Rails‧Yahoo! ‧node.js‧shopify ‧symfony‧EMI ‧mongodb‧six apart ‧Erlang 65
  74. 74. Watch! Fork
  75. 75. 67
  76. 76. Fork network 68
  77. 77. Patch ?‧Fork Repository‧Clone‧Fix bugs Enhance features‧Push‧ Pull request 69
  78. 78. Fork & Pull Requests 75% fork outside merge !!watch 25% outside contributions !! 70
  79. 79. Follow!
  80. 80. Wiki 72
  81. 81. Code ReviewDiff
  82. 82. Download Source or Package 74
  83. 83. Github pages http://pages.github.com/‧ your.github.com repository Github http://your.github.com‧ gh-pages your_project Github http://your.github.com/your_project 75
  84. 84. Github pages http://pages.github.com/‧ your.github.com repository Github http://your.github.com‧ gh-pages your_project Github http://your.github.com/your_project Git ( Branch merge) 75
  85. 85. 3-4. Git 76
  86. 86. Push GitHub Reporitory‧ Github‧git remote add origin git@github.com:your_account/ sandbox.git‧git push -u origin master‧ git push ![rejected] git pull 77
  87. 87. Pull‧git pull origin master git pull git fetch branch branch merge‧git pull --rebase rebase 78
  88. 88. git pull --rebase mergehttp://ihower.tw/blog/archives/3843 79
  89. 89. git pull --rebase mergehttp://ihower.tw/blog/archives/3843 branch master ! 79
  90. 90. git pull merge? rebase?‧ conflict merge feature branch ?‧ conflict --rebase 80
  91. 91. git pull merge? rebase?‧ conflict merge feature branch ?‧ conflict --rebase git flow branches merge ! 80
  92. 92. Git Submodule‧Git SVN‧ ? SVN Externals?‧ http://josephjiang.com/entry.php?id=342‧ ? http://josephjiang.com/entry.php?id=357‧ Ruby/Rails Develops XD Bundler dependencies 81
  93. 93. ‧git tag‧git archive‧git bisect‧git blame‧git grep‧git show‧git reflog ( commits 90 )‧git gc 82
  94. 94. 5. Git 83
  95. 95. 1. Repositories ? 84
  96. 96. Centralized Workflow Push Repository Branches ( ) 85
  97. 97. Integration-Manager Workflow Open Source Push Repository request pull GitHub Fork Pull Request 86
  98. 98. Dictator and Lieutenants Workflow Open Source Linux Kernel patch pull request 87
  99. 99. 2. Repository Branches ? 88
  100. 100. Git flow: branches http://nvie.com/posts/a-successful-git-branching-model/ http://ihower.tw/blog/archives/5140 89
  101. 101. ‧master: production-ready‧develop: 90
  102. 102. (1)‧Feature branches bugs develop merge develop develop ( merge rebase) 91
  103. 103. (1)‧Feature branches bugs develop merge develop develop ( merge rebase) branch!! 91
  104. 104. (2)‧Release branches release bugs develop merge master develop 92
  105. 105. (3)‧Hotfix branches release master master merge master develop 93
  106. 106. : Feature branches: develop release branches: hotfix branches: master 94
  107. 107. git-flow‧git flow init‧git flow feature finish feature_name‧git flow feature publish feature_name‧git flow feature track feature_name‧git flow feature finish feature_name 95
  108. 108. Branch-Owner Policy‧ project leaders commit/merge develop branch‧ release team master branch‧ topic branches pull request code review merge develop‧GitHub pull request 96
  109. 109. Code Review 97
  110. 110. Branch Diff 98
  111. 111. the maintainer workflow for git itself http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html‧master tracks the commits that should go into the next release‧maint tracks the commits that should go into the next "maintenance release"‧next is intended as a testing branch for topics being tested for stability for master.‧pu (proposed updates branches) is an integration branch for things that are not quite ready for inclusion yet‧topic branches for any nontrivial feature99
  112. 112. Ruby on Rails workflow‧ Rails 3.0.5‧master release 3.1‧stable branches 2-2-stable 2-3-stable bug fixes 3-0-stable bug fixes 100
  113. 113. One more thing... 101
  114. 114. git-svn‧ SubVersion Git Git !‧git svn clone http://url/svn/trunk/ project_name‧(normal git operations)‧git svn dcommit 102
  115. 115. ‧http://progit.org/book/‧http://git-scm.com‧http://help.github.com/‧http://gitimmersion.com‧http://www.gitready.com/‧http://gitref.org‧http://ihower.tw/blog/category/git‧Pragmatic Version Control Using Git, Pragmatic 103
  116. 116. Thank you.google “ihower” 104

×