Git For The Android Developer
Upcoming SlideShare
Loading in...5

Like this? Share it with your network


Git For The Android Developer







Total Views
Views on SlideShare
Embed Views



7 Embeds 2,907 2820 37 34 13 1 1 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Git For The Android Developer Presentation Transcript

  • 1. GitFor the Android DeveloperTony Hillerson, AnDevCon Fall 2011#AnDevCon #effectiveui @thillerson
  • 2. About Me➡ Worked with Android and Git for a few years now➡ O’Reilly Screencaster: Developing Android Applications➡➡➡ Tech Reviewer
  • 3. Conference App➡ Get it, rate stuff
  • 4. Diving Right InLearning by Doing
  • 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. .gitignore➡ Can be nested deeply➡
  • 7. Git Log - The Project’s History➡ What got committed?➡ Commit messages➡ Content➡ When? Who?
  • 8. Remotes➡ remote add➡ clone➡ fetch➡ pull➡ push
  • 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. 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. 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. PreliminariesGetting Git and Getting Set Up
  • 13. What’s a Git?A completely ignorant, childish person with no manners. - Linus Torvalds
  • 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. -
  • 15. Getting Set Up on Mac➡ Homebrew -➡ MacPorts -
  • 16. Getting Set Up on Windows➡ msysgit -
  • 17. Getting Set Up on Linux➡ apt, etc - you probably know the drill
  • 18. Gooies!➡ Git Tower - M➡ BrotherMac Bard’s GitX fork - A C➡ Tortoise Git - WMac I N
  • 19. Eclipse Integration➡
  • 20. Reference➡ Git -➡ ProGit - - Scott Chacon➡ Insider Guide to Github - insider-guide-to-github - Scott Chacon
  • 21. The Command LineA Short Sermon
  • 22. The Guts of GitThe Little Bits that Make Git Different
  • 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. In Git There Are Only...➡ Blobs➡ Trees➡ Commits
  • 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. 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. 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. Refs➡ Point to commits➡ .git/refs/heads - the latest commits in local branches➡ HEAD - the latest commit on the current branch
  • 29. Blobs Are Content b84ed8ed e8d5cf6 579a3b1
  • 30. Trees Give Structure9899d2c b84ed8ed foo.txt 579a3b1 bar.txt e8d5cf6 baz.html trees can point 3ffb35b /images to other trees
  • 31. Commits Point to Trees d414c3e 9899d2c “Updated the main activity” b84ed8ed foo.txt 579a3b1 bar.txt e8d5cf6 baz.html 3ffb35b /images
  • 32. Commits have Parents d414c3e “Updated the main activity” 090c953 “Fixed bug #42” 4493671 “Added RoboGuice” c1d1f60 “Initial commit”
  • 33. Refs Point to Commits HEAD d414c3e “Updated the main activity” 090c953 “Fixed bug #42” 4493671 “Added RoboGuice” c1d1f60 “Initial commit”
  • 34. And That’s All YouNeed To Know About Git
  • 35. And That’s All YouNeed To Know About Git (Mostly)
  • 36. Sweet Moves with GitSweet, Sweet Moves
  • 37. Interactive AddBuilding Semantic Commits
  • 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. Amending A CommitFix the Last Commit
  • 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. Git RevertMore Like Git Reverse
  • 42. git revert➡ Commits the reverse of a commit➡ The previous commit is still there➡ != svn revert
  • 43. Git StashLike a Little Repo In Your Repo
  • 44. git stash➡ remember: git help stash➡ Stash away changes in a safe place
  • 45. BranchingHitting Save Before You Fight the Level Boss
  • 46. Branching➡ checkout -b➡ merging➡ rebasing
  • 47. How To Think About Branching➡ Topic Branches➡ Mainline➡ What do you want “master” to mean?➡ Branching examples
  • 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. 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. Branching git checkout -b add_login_activitymasterMac fb4f5d9 c5083fa add_login_activity Mac 9aa8827 fe594ce ccb6f5e
  • 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. 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. Branching: Rebasing➡ Better than merging➡ Don’t use if you’ve pushed your branch to a remote➡ Can override with `git push -force`
  • 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. Cherry PickI’ll Take One Of Those... And One Of Those...
  • 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. Interactive RebaseRewrite History
  • 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. Whoops!Lots Of Ways To Fix It
  • 60. git checkout➡ `git checkout [filename]` = remove all unstaged changes
  • 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. git reset soft➡ git reset --soft [commit]➡ Moves HEAD to commit➡ Puts the “popped” contents on the index
  • 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. 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. 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. 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. Thank you! #AnDevCon #effectiveui @thillerson Off My Git Course These SlidesGit For the Android Developer • Tony Hillerson • AnDevCon Fall 2011