Git and GitHub  ihower@gmail.com       2011/3       CC BY-NC-SA 3.0            Pro Git
?•          a.k.a. ihower • http://ihower.tw • http://twitter.com/ihower• Ruby on Rails Developer since 2006• The organize...
Agenda‧1.        DVCS‧2.        Git‧3. Git‧4. Github‧5. Git                           3
‧2002                 (     copy       )‧2005 SubVersion‧2007 SVK‧2008 Git ( SVN          push/pull)‧2009 Git (         ma...
1.   DVCS ?              5
Version Control System‧     repository‧‧‧Branch(     )‧Tag(    )                                  6
Local VCScopy paste      , rcs                        7
Local VCScopy paste      , rcs                        7
Centralized VCS CVS, Subversion, Perforce                             8
Centralized VCS CVS, Subversion, Perforce            1.          2. Single point of failure                               ...
Distributed VCS Git, Mercurial(Hg), Bazaar                              9
Distributed VCS Git, Mercurial(Hg), Bazaar                              workflows                                     !   ...
Local development‧         CSV      commit          history log‧       CSV commit     history log                         ...
2.   Git ?             11
Git‧       Linux Torvalds (Linux creator)‧            Linux Kernel‧2005/4             2005/6             Linix Kernel 2005...
Git?‧Git            ‧Qt‧Linux Kernel   ‧Ruby on Rails‧Perl           ‧Android‧Eclipse        ‧PostgreSQL‧Gnome          ‧D...
other VCS way                14
Git Way metadata   snapshots                        15
Git Way metadata       snapshots    I’m a mini filesystem!        Not just VCS.                             15
Git Way metadata        snapshots    I’m a mini filesystem!        Not just VCS.              Apple   Time       Machine  ...
: Working tree/Staging area/Repository                              16
Why Git is Better than X          http://zh-tw.whygitisbetterthanx.com‧‧‧Git‧Git‧Staging‧‧‧        GitHub!
Git                SVN‧svn          merge branch         branch‧svn    log‧svn commit   checkout    commit                ...
3-1. Git           19
Install‧      Git    http://help.github.com/set-up-git-redirect‧      Git GUI(optional)    GitX (Mac)    TortoiseGit/Git E...
Setup‧      ~/.gitconfig‧git config --global user.name "Your Name"‧git config --global user.email "your@email.com"‧git config ...
Setup (Windows only)‧‧git config --global core.autocrlf true‧git config --global core.safecrlf true                         ...
Repository‧mkdir sandbox‧cd sandbox‧git init                              23
Repository‧SSH    git clone git@github.com:ihower/sandbox.git‧HTTP/HTTPS    git clone https://ihower@github.com/ihower/san...
commit‧touch README‧git add README‧git status‧git commit -m “First Commit”                                25
‧        README‧git status‧git diff‧git add . (                                    !)‧git status‧git diff --cached‧git com...
Staging                commit‧touch a.rb‧touch b.rb‧git add a.rb‧git commit “Update a”‧git add b.rb‧git commit “Update b” ...
‧git rm a.rb‧git mv b.rb c.rb‧git add .‧git commit “Remove a, Rename b to c”‧      copy ?     Git cp                      ...
commitUntracked files      Changes not      Changes to be                 staged for commit    committed                   ...
‧git log‧git log --oneline‧git log --oneline --decorate --graph‧          GUI                                        30
‧        .gitignore (                commit        )‧        ~/.gitignore (      Global    )‧                 commit     ....
commit   ?‧tmp/*‧log/*‧                      (               )‧‧build/*   compile‧.DS_Store‧Thumbs.rb                     ...
Commit‧                /     /                                bug fixed           unit test           commit               ...
3-2. Git           34
Branch ?‧topic feature‧Bug fixes‧      (refactor)‧                               35
branch‧git branch new_feature‧git branch‧git checkout new_feature‧touch new_feature.rb‧git add new_feature.rb‧git commit -...
branch‧git branch new_feature‧git branch‧git checkout new_feature‧touch new_feature.rb‧git add new_feature.rb‧git commit -...
branch‧git checkout master‧git merge new_feature                          37
38
(master) git branch iss53                            39
(iss53) git commit                     40
(master) git branch hotfix   (hotfix) git commit                            41
(master) git merge hotfix                           42
(master) git merge hotfix             fast-forward                            42
(iss53) git commit                     43
(master) git merge iss53                           44
(master) git merge iss53                C6      merge                     commit                                44
‧Straight merge                  branch commits              merge commit      Parents           fast-forward            m...
(cont.)‧Squashed commit    git merge new_feature --squash                     merge-commit        log SVN    merge‧cherry-...
branch‧      working tree  branch    staging area    modified‧         commit            push reset‧         stash    git s...
3-3. Git   push              48
push                        branch                         ...‧    SVN       Git     Commit                     commit log...
reset (        commit                 )‧git reset e37c75787‧git reset HEAD^ (          working tree)‧git reset HEAD^ --sof...
revert (           commit     )‧    reset      revert           commit‧git revert e37c75787‧git revert HEAD^              ...
rebase (                    commit                      )‧git rebase -i e37c7578pick 048b59e first commitpick 995dbb3 chan...
: rebase‧rebase                (             local branch)   1.                 branch   2.         branch     commits   a...
:                new_feature           master         D---E new_feature     /A---B---C---F master                         ...
merge(new_feature) git merge master          D--------E         /              A---B---C---F----G new_feature             ...
rebase            G !(new_feature) git rebase master A---B---C---F---D---E new_feature          master                    ...
rebase            G !(new_feature) git rebase master A---B---C---F---D---E new_feature          master                    ...
push           commits   push   !!                         57
rebase + merge        (              feature branch           develop)‧    feature branch                merge    feature ...
mergecommit            59
(1)‧          --no-ff         merge commit        fast-forward‧rebase         feature branch          push‧               ...
(2)‧     rebase                  conflict‧              rebase    branch               rebase                             61
4. Github   ?                62
=
GitHub?‧twitter     ‧jQuery‧facebook    ‧YUI 3‧rackspace   ‧mootools‧digg        ‧Ruby on Rails‧Yahoo!      ‧node.js‧shopi...
Watch!   Fork
67
Fork network               68
Patch           ?‧Fork            Repository‧Clone‧Fix bugs  Enhance features‧Push‧ Pull request                          ...
Fork & Pull Requests        75%   fork   outside merge               !!watch                25%      outside contributions...
Follow!
Wiki       72
Code ReviewDiff
Download Source  or Package                  74
Github pages             http://pages.github.com/‧   your.github.com       repository Github         http://your.github.co...
Github pages               http://pages.github.com/‧   your.github.com       repository Github         http://your.github....
3-4. Git           76
Push               GitHub Reporitory‧ Github‧git remote add origin git@github.com:your_account/ sandbox.git‧git push -u or...
Pull‧git pull origin master       git pull     git fetch          branch                         branch   merge‧git pull -...
git pull --rebase   mergehttp://ihower.tw/blog/archives/3843                                      79
git pull --rebase   mergehttp://ihower.tw/blog/archives/3843                branch                  master                ...
git pull            merge?                     rebase?‧                         conflict          merge                    ...
git pull            merge?                     rebase?‧                           conflict           merge                 ...
Git Submodule‧Git      SVN‧                                ?   SVN Externals?‧      http://josephjiang.com/entry.php?id=34...
‧git tag‧git archive‧git bisect‧git blame‧git grep‧git show‧git reflog (   commits 90 )‧git gc                             ...
5. Git         83
1.     Repositories ?                      84
Centralized Workflow              Push           Repository   Branches          (   )                               85
Integration-Manager Workflow    Open Source                              Push Repository            request pull       GitH...
Dictator and Lieutenants Workflow              Open Source          Linux Kernel           patch    pull request           ...
2.         Repository     Branches ?                        88
Git flow:                                    branches  http://nvie.com/posts/a-successful-git-branching-model/             ...
‧master:    production-ready‧develop:                               90
(1)‧Feature branches                     bugs      develop           merge     develop                                    ...
(1)‧Feature branches                     bugs      develop           merge     develop                                    ...
(2)‧Release branches           release              bugs      develop           merge     master   develop                ...
(3)‧Hotfix branches         release                  master        master          merge    master   develop               ...
: Feature branches: develop release branches: hotfix branches: master           94
git-flow‧git flow init‧git flow feature finish feature_name‧git flow feature publish feature_name‧git flow feature track feature...
Branch-Owner Policy‧          project leaders       commit/merge develop branch‧          release team            master b...
Code Review              97
Branch   Diff         98
the maintainer workflow for git itself http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html‧master tracks the c...
Ruby on Rails      workflow‧        Rails            3.0.5‧master                           release 3.1‧stable branches    ...
One more thing...                    101
git-svn‧         SubVersion                       Git        Git        !‧git svn clone http://url/svn/trunk/ project_name...
‧http://progit.org/book/‧http://git-scm.com‧http://help.github.com/‧http://gitimmersion.com‧http://www.gitready.com/‧http:...
Thank you.google “ihower”                         104
Git and Github
Upcoming SlideShare
Loading in...5
×

Git and Github

31,696

Published on

4 Comments
120 Likes
Statistics
Notes
No Downloads
Views
Total Views
31,696
On Slideshare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
1,047
Comments
4
Likes
120
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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×