GitFor the Android DeveloperTony Hillerson, AnDevCon Fall 2011#AnDevCon #effectiveui @thillersonhttp://www.slideshare.net/...
About Me➡ Worked     with Android and Git for a few years now➡ O’Reilly   Screencaster: Developing Android Applications➡ h...
Conference App➡ Get it,   rate stuff
Diving Right InLearning by Doing
git                    git                 or   cloneinit                      git                  86650c185eda50c9f9d58e...
.gitignore➡ Can   be nested deeply➡ https://github.com/github/gitignore
Git Log - The Project’s History➡ What   got committed?➡ Commit    messages➡ Content➡ When? Who?
Remotes➡ remote   add➡ clone➡ fetch➡ pull➡ push
Tagging                git tag -a -m"Tagging v1.0" v1.0 c5083famasterMac      fb4f5d9      c5083fa      3f43fa3➡      Both...
Recap of Simple Commands➡ git init -   Creates an empty Git repository➡ git add -    Adds a file to the stage (“stages a f...
Why Source Control?➡   For the solo developer?➡   Protection against mistakes➡   Freedom➡   ... to refactor➡   ... to expe...
PreliminariesGetting Git and Getting Set Up
What’s a Git?A completely ignorant, childish person with no manners.                                                      ...
What’s a Git?   Git is a free & open source, distributed version    control system designed to handle everything   from sm...
Getting Set Up on Mac➡ Homebrew    - http://mxcl.github.com/homebrew/➡ MacPorts   - http://www.macports.org/
Getting Set Up on Windows➡ msysgit   -http://code.google.com/p/msysgit/
Getting Set Up on Linux➡ apt,   etc - you probably know the drill
Gooies!➡ Git Tower       - http://git-tower.com                            M➡ BrotherMac                Bard’s GitX fork -...
Eclipse Integration➡ http://www.eclipse.org/egit/
Reference➡ Git - http://git-scm.com/➡ ProGit   - http://progit.org/book/ - Scott Chacon➡ Insider   Guide to Github - http:...
The Command LineA Short Sermon
The Guts of GitThe Little Bits that Make Git Different
What’s With all the Characters?        86650c185eda50c9f9d58e2fbdf8b7113e5dee54➡   SHA1 Hash➡   Uniquely identifies a comm...
In Git There Are Only...➡ Blobs➡ Trees➡ Commits
Blobs➡ The   contents of your files are stored as binary files  in .git/objects➡ Git is   efficient. It only stores the sa...
Trees➡ Trees   give structure to blobs➡ Trees   are also stored in .git/objects➡ Identified   by SHA-1➡ View    a tree wit...
Commits➡ Identified   by a SHA-1➡ Points   to one tree➡ Has   a required message➡ May   have one (or more) parent commit(s...
Refs➡ Point   to commits➡ .git/refs/heads   - the latest commits in local branches➡ HEAD    - the latest commit on the cur...
Blobs Are Content               b84ed8ed                          e8d5cf6          579a3b1
Trees Give Structure9899d2c           b84ed8ed   foo.txt           579a3b1    bar.txt           e8d5cf6    baz.html       ...
Commits Point to Trees        d414c3e                    9899d2c     “Updated the main activity”                          ...
Commits have Parents                 d414c3e                 “Updated the main activity”                 090c953          ...
Refs Point to Commits           HEAD         d414c3e                        “Updated the main activity”                   ...
And That’s All YouNeed To Know About        Git
And That’s All YouNeed To Know About        Git       (Mostly)
Sweet Moves with GitSweet, Sweet Moves
Interactive AddBuilding Semantic Commits
Interactive Add - Building Commits➡ `git   add` simply adds to the stage➡ `git   commit -a` will commit all changes to tra...
Amending A CommitFix the Last Commit
git commit --amend➡ Oops!   I misspelled something in the commit message➡ Oops!   I did `git commit -a` and forgot to `git...
Git RevertMore Like Git Reverse
git revert➡ Commits    the reverse of a commit➡ The   previous commit is still there➡ !=   svn revert
Git StashLike a Little Repo In Your Repo
git stash➡ remember:    git help stash➡ Stash   away changes in a safe place
BranchingHitting Save Before You Fight the Level Boss
Branching➡ checkout -b➡ merging➡ rebasing
How To Think About Branching➡ Topic   Branches➡ Mainline➡ What    do you want “master” to mean?➡ Branching   examples
Topic Branches➡ Branching   is about controlling feature sets➡ Make   a new branch for a story➡ Make   a new branch for a ...
Team Branching Strategies➡ What   do you want “master” to mean?➡ Keep   master deployable?➡ one strategy   for web softwar...
Branching      git checkout -b add_login_activitymasterMac      fb4f5d9    c5083fa                           add_login_act...
Branching: Merging                                              git checkout master                                       ...
Branching: Rebasing master Mac       fb4f5d9    c5083fa         3f43fa3                            add_login_activity     ...
Branching: Rebasing➡ Better   than merging➡ Don’t   use if you’ve pushed your branch to a remote➡ Can   override with `git...
Git Pull --rebase➡ Also   available: `git pull --rebase`➡ Helpful   for avoiding merge commits➡ May    cause problems if g...
Cherry PickI’ll Take One Of Those... And One Of Those...
Cherry-pick git cherry-pick fe594ce                                                              A new commit withmaster  ...
Interactive RebaseRewrite History
Interactive Rebase - Fixing History➡ git rebase   -i [commit]➡A   list of all commits in the current order➡ Reorder➡ Fix  ...
Whoops!Lots Of Ways To Fix It
git checkout➡ `git   checkout [filename]` = remove all unstaged changes
git reset➡ `git   reset [filename]` = opposite of `git add [filename]`➡ `git   reset HEAD` = same as above - acts on all c...
git reset soft➡ git reset --soft   [commit]➡ Moves   HEAD to commit➡ Puts   the “popped” contents on the index
git reset mixed (default)➡ git reset [commit]➡ Moves   HEAD to commit➡ Puts   the “popped” contents on the index➡ Moves   ...
git reset hard➡ git reset --hard   [commit]➡ Moves   HEAD to commit➡ Puts   the “popped” contents on the index➡ Moves   th...
git reset use cases➡ Back    that last commit up (git reset HEAD^)➡ Don’t   forget `commit --amend`➡ Oops,    didn’t mean ...
The Take Home➡ SCM      Is Important➡ No matter     what kind of developer you are➡ Git is   fundamentally different from ...
Thank you!                                     #AnDevCon                                     #effectiveui                 ...
Upcoming SlideShare
Loading in...5
×

Git For The Android Developer

12,510

Published on

SL

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
12,510
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
77
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Git For The Android Developer

  1. 1. GitFor the Android DeveloperTony Hillerson, AnDevCon Fall 2011#AnDevCon #effectiveui @thillersonhttp://www.slideshare.net/thillerson/git-for-android-developers
  2. 2. About Me➡ Worked with Android and Git for a few years now➡ O’Reilly Screencaster: Developing Android Applications➡ http://training.oreilly.com/androidapps/➡ http://training.oreilly.com/androidapps2/➡ Tech Reviewer
  3. 3. Conference App➡ Get it, rate stuff
  4. 4. Diving Right InLearning by Doing
  5. 5. git git or cloneinit git 86650c185eda50c9f9d58e2fbdf8b7113e5dee54 git commit changes add git git commit 6facfd9f34173f4fb024196996e948a87c85eb56 changes add git git commit b02ef5bf190e28ba24eab3ffab6133181cb5b5ef changes add ... ∞Simple Workflow
  6. 6. .gitignore➡ Can be nested deeply➡ https://github.com/github/gitignore
  7. 7. Git Log - The Project’s History➡ What got committed?➡ Commit messages➡ Content➡ When? Who?
  8. 8. Remotes➡ remote add➡ clone➡ fetch➡ pull➡ push
  9. 9. Tagging git tag -a -m"Tagging v1.0" v1.0 c5083famasterMac fb4f5d9 c5083fa 3f43fa3➡ Both “-v1.0” and c5083fa will point to c5083fa➡ Push this tag with `git push --tags`➡ Can be cryptologically signed
  10. 10. Recap of Simple Commands➡ git init - Creates an empty Git repository➡ git add - Adds a file to the stage (“stages a file”)➡ git rm - Removes from version control➡ git commit - Commits the staged changes to the (local) repository➡ git log - A view of the history➡ git tag - Names a commit➡ .gitignore - tells git to ignore certain files
  11. 11. Why Source Control?➡ For the solo developer?➡ Protection against mistakes➡ Freedom➡ ... to refactor➡ ... to experiment➡ For the development team?➡ All of the above, plus:➡ Parallel development➡ Merging different code branches
  12. 12. PreliminariesGetting Git and Getting Set Up
  13. 13. What’s a Git?A completely ignorant, childish person with no manners. - http://urbandictionary.com Linus Torvalds http://en.wikipedia.org/wiki/Linus_Torvalds
  14. 14. What’s a Git? Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency. - http://git-scm.com
  15. 15. Getting Set Up on Mac➡ Homebrew - http://mxcl.github.com/homebrew/➡ MacPorts - http://www.macports.org/
  16. 16. Getting Set Up on Windows➡ msysgit -http://code.google.com/p/msysgit/
  17. 17. Getting Set Up on Linux➡ apt, etc - you probably know the drill
  18. 18. Gooies!➡ Git Tower - http://git-tower.com M➡ BrotherMac Bard’s GitX fork - A http://brotherbard.com/blog/2010/03/experimental-gitx-fork/ C➡ Tortoise Git - http://code.google.com/p/tortoisegit/ WMac I N
  19. 19. Eclipse Integration➡ http://www.eclipse.org/egit/
  20. 20. Reference➡ Git - http://git-scm.com/➡ ProGit - http://progit.org/book/ - Scott Chacon➡ Insider Guide to Github - http://www.pragprog.com/screencasts/v-scgithub/ insider-guide-to-github - Scott Chacon
  21. 21. The Command LineA Short Sermon
  22. 22. The Guts of GitThe Little Bits that Make Git Different
  23. 23. What’s With all the Characters? 86650c185eda50c9f9d58e2fbdf8b7113e5dee54➡ SHA1 Hash➡ Uniquely identifies a commit➡ Secure - very unlikely that someone can tamper with content in a repository “... to have a probability of a SHA1-hash collision rise to 1/2, you need about 10^24 objects ...” - Scott Chacon in Pro Git (paraphrased)
  24. 24. In Git There Are Only...➡ Blobs➡ Trees➡ Commits
  25. 25. Blobs➡ The contents of your files are stored as binary files in .git/objects➡ Git is efficient. It only stores the same content once.➡ Identified by a SHA-1➡ Show blob contents with e.g. git show c7fb9f5
  26. 26. Trees➡ Trees give structure to blobs➡ Trees are also stored in .git/objects➡ Identified by SHA-1➡ View a tree with ls-tree, e.g. `git ls-tree HEAD`
  27. 27. Commits➡ Identified by a SHA-1➡ Points to one tree➡ Has a required message➡ May have one (or more) parent commit(s)➡ Show the reachable commits from a commit: git rev-list HEAD
  28. 28. Refs➡ Point to commits➡ .git/refs/heads - the latest commits in local branches➡ HEAD - the latest commit on the current branch
  29. 29. Blobs Are Content b84ed8ed e8d5cf6 579a3b1
  30. 30. Trees Give Structure9899d2c b84ed8ed foo.txt 579a3b1 bar.txt e8d5cf6 baz.html trees can point 3ffb35b /images to other trees
  31. 31. Commits Point to Trees d414c3e 9899d2c “Updated the main activity” b84ed8ed foo.txt 579a3b1 bar.txt e8d5cf6 baz.html 3ffb35b /images
  32. 32. Commits have Parents d414c3e “Updated the main activity” 090c953 “Fixed bug #42” 4493671 “Added RoboGuice” c1d1f60 “Initial commit”
  33. 33. Refs Point to Commits HEAD d414c3e “Updated the main activity” 090c953 “Fixed bug #42” 4493671 “Added RoboGuice” c1d1f60 “Initial commit”
  34. 34. And That’s All YouNeed To Know About Git
  35. 35. And That’s All YouNeed To Know About Git (Mostly)
  36. 36. Sweet Moves with GitSweet, Sweet Moves
  37. 37. Interactive AddBuilding Semantic Commits
  38. 38. Interactive Add - Building Commits➡ `git add` simply adds to the stage➡ `git commit -a` will commit all changes to tracked files (add and commit)➡ `git add -i` -- a command line tool to interactively add changes➡ Individual commits shouldn’t leave things broken➡ Try to commit some useful feature or bug fix all together
  39. 39. Amending A CommitFix the Last Commit
  40. 40. git commit --amend➡ Oops! I misspelled something in the commit message➡ Oops! I did `git commit -a` and forgot to `git add` a file➡ Oops! I just committed a bug➡ USE ONLY BEFORE YOU SHARE CHANGES
  41. 41. Git RevertMore Like Git Reverse
  42. 42. git revert➡ Commits the reverse of a commit➡ The previous commit is still there➡ != svn revert
  43. 43. Git StashLike a Little Repo In Your Repo
  44. 44. git stash➡ remember: git help stash➡ Stash away changes in a safe place
  45. 45. BranchingHitting Save Before You Fight the Level Boss
  46. 46. Branching➡ checkout -b➡ merging➡ rebasing
  47. 47. How To Think About Branching➡ Topic Branches➡ Mainline➡ What do you want “master” to mean?➡ Branching examples
  48. 48. Topic Branches➡ Branching is about controlling feature sets➡ Make a new branch for a story➡ Make a new branch for a bug fix➡ Make a new branch to spike something
  49. 49. Team Branching Strategies➡ What do you want “master” to mean?➡ Keep master deployable?➡ one strategy for web software➡ Use “master” as an integration branch?➡ Each developer uses topic branches and integrates to master➡ Make a branch for releases
  50. 50. Branching git checkout -b add_login_activitymasterMac fb4f5d9 c5083fa add_login_activity Mac 9aa8827 fe594ce ccb6f5e
  51. 51. Branching: Merging git checkout master git merge add_login_activitymasterMac 9aa8827 fe594ce ccb6f5e fb4f5d9 c5083fa 3f43fa3 add_login_activity Mac 9aa8827 fe594ce ccb6f5e
  52. 52. Branching: Rebasing master Mac fb4f5d9 c5083fa 3f43fa3 add_login_activity before Mac 9aa8827 fe594ce ccb6f5emasterMac fb4f5d9 c5083fa 3f43fa3 add_login_activity after Mac 9aa8827 fe594ce ccb6f5e `git rebase master`
  53. 53. Branching: Rebasing➡ Better than merging➡ Don’t use if you’ve pushed your branch to a remote➡ Can override with `git push -force`
  54. 54. Git Pull --rebase➡ Also available: `git pull --rebase`➡ Helpful for avoiding merge commits➡ May cause problems if git can’t automatically merge➡ `git reset HEAD` and start over with normal `git pull`
  55. 55. Cherry PickI’ll Take One Of Those... And One Of Those...
  56. 56. Cherry-pick git cherry-pick fe594ce A new commit withmaster the changes from fe594ceMac fb4f5d9 c5083fa 3f43fa3 add_login_activity Mac 9aa8827 fe594ce ccb6f5e
  57. 57. Interactive RebaseRewrite History
  58. 58. Interactive Rebase - Fixing History➡ git rebase -i [commit]➡A list of all commits in the current order➡ Reorder➡ Fix a certain commit➡ Squash commits together➡ Delete commits➡ DON’T USE AFTER YOU’VE PUSHED
  59. 59. Whoops!Lots Of Ways To Fix It
  60. 60. git checkout➡ `git checkout [filename]` = remove all unstaged changes
  61. 61. git reset➡ `git reset [filename]` = opposite of `git add [filename]`➡ `git reset HEAD` = same as above - acts on all changes➡ `git reset HEAD^` (also ^^, or ~1, ~42, etc.) = rollback commits to working tree➡ All examples of “mixed” reset
  62. 62. git reset soft➡ git reset --soft [commit]➡ Moves HEAD to commit➡ Puts the “popped” contents on the index
  63. 63. git reset mixed (default)➡ git reset [commit]➡ Moves HEAD to commit➡ Puts the “popped” contents on the index➡ Moves the index to the working tree as changes
  64. 64. git reset hard➡ git reset --hard [commit]➡ Moves HEAD to commit➡ Puts the “popped” contents on the index➡ Moves the index to the working tree as changes➡ Makes the working tree look like the index➡ DESTRUCTIVE
  65. 65. git reset use cases➡ Back that last commit up (git reset HEAD^)➡ Don’t forget `commit --amend`➡ Oops, didn’t mean to commit that file➡I meant that commit to be on a branch!
  66. 66. The Take Home➡ SCM Is Important➡ No matter what kind of developer you are➡ Git is fundamentally different from the others➡ It’s not a database of patches➡ It’s a history of filesystem snapshots➡ It gives you freedom to innovate, make mistakes, and collaborate.
  67. 67. Thank you! #AnDevCon #effectiveui @thillerson http://github.com/thillerson http://slideshare.com/thillersonHalf Off My Git Course These SlidesGit For the Android Developer • Tony Hillerson • AnDevCon Fall 2011
  1. A particular slide catching your eye?

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

×