This document summarizes a presentation about using Git for Android development. The presentation introduces basic Git commands like init, add, commit, log and tag. It explains Git concepts such as blobs, trees and commits. The presentation also covers branching, merging, rebasing and tools for collaborating with Git. Attendees are encouraged to learn Git through hands-on use and experimentation.
Unraveling Multimodality with Large Language Models.pdf
Git for Android Developers
1. Git
For the Android Developer
Tony Hillerson, AnDevCon Spring 2012
#AnDevCon @tackmobile @thillerson
http://www.slideshare.net/thillerson/git-for-android-developers
PRESENTATION ANDEVCON • MAY 14, 2012
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
PRESENTATION tackmobile.com
3. Diving Right In
Learning by Doing
PRESENTATION ANDEVCON • MAY 14, 2012
8. Tagging
git tag -a -m"Tagging v1.0" v1.0 c5083fa
master
fb4f5d9 c5083fa 3f43fa3
• Both “-v1.0” and c5083fa will point to c5083fa
• Push this tag with `git push --tags`
• Can be cryptologically signed
PRESENTATION tackmobile.com
9. 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
PRESENTATION tackmobile.com
10. 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
PRESENTATION tackmobile.com
11. Preliminaries
Getting Git and Getting Set Up
PRESENTATION ANDEVCON • MAY 14, 2012
12. What’s a Git?
A completely ignorant, childish person with no
manners. - http://urbandictionary.com
Linus Torvalds
PRESENTATION http://en.wikipedia.org/wiki/Linus_Torvalds tackmobile.com
13. 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
PRESENTATION tackmobile.com
14. Getting Set Up on Mac
• Homebrew - http://mxcl.github.com/homebrew/
• brew install git
• MacPorts - http://www.macports.org/
PRESENTATION tackmobile.com
15. Getting Set Up on Windows
• msysgit -http://code.google.com/p/msysgit/
PRESENTATION tackmobile.com
16. Getting Set Up on Linux
• apt, etc - you probably know the drill
PRESENTATION tackmobile.com
17. Gooies!
Git Tower - http://git-tower.com
M
•
• Source Tree - Mac App Store A
• Brother Bard’s GitX fork - http://brotherbard.com/blog/2010/03/experimental-gitx-fork/ C
• Tortoise Git - http://code.google.com/p/tortoisegit/ W
I
N
PRESENTATION tackmobile.com
19. 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
PRESENTATION tackmobile.com
20. The Command Line
A Short Sermon
PRESENTATION ANDEVCON • MAY 14, 2012
21. The Guts of Git
The Little Bits that Make Git Different
PRESENTATION ANDEVCON • MAY 14, 2012
22. 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
PRESENTATION tackmobile.com
23. SHA-1 Hash Keys
“ ... 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)
PRESENTATION tackmobile.com
24. In Git There Are Only...
• Blobs
• Trees
• Commits
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
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`
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
28. Refs
• Point to commits
• .git/refs/heads - the latest commits in local branches
• HEAD - the latest commit on the current branch
PRESENTATION tackmobile.com
29. Blobs Are Content
b84ed8ed
e8d5cf6
579a3b1
PRESENTATION tackmobile.com
30. Trees Give Structure
9899d2c
b84ed8ed foo.txt
579a3b1 bar.txt
e8d5cf6 baz.html
trees can point
3ffb35b /images to other trees
PRESENTATION tackmobile.com
31. Commits Point to Trees
d414c3e 9899d2c
“Updated the main activity”
b84ed8ed foo.txt
579a3b1 bar.txt
e8d5cf6 baz.html
3ffb35b /images
PRESENTATION tackmobile.com
32. Commits Have Parents
d414c3e
“Updated the main activity”
090c953
“Fixed bug #42”
4493671
“Added RoboGuice”
c1d1f60
“Initial commit”
PRESENTATION tackmobile.com
33. Refs Point to Commits
HEAD d414c3e
“Updated the main activity”
090c953
“Fixed bug #42”
4493671
“Added RoboGuice”
c1d1f60
“Initial commit”
PRESENTATION tackmobile.com
34. And That’s All You
Need To Know About
Git
PRESENTATION tackmobile.com
35. And That’s All You
Need To Know About
Git
(Mostly)
PRESENTATION tackmobile.com
36. Sweet Moves with Git
Sweet, Sweet Moves
PRESENTATION ANDEVCON • MAY 14, 2012
37. Interactive Add
Building Semantic Commits
PRESENTATION ANDEVCON • MAY 14, 2012
38. Interactive Add - Building Semantic 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
PRESENTATION tackmobile.com
39. Amending A Commit
Fix the Last Commit
PRESENTATION ANDEVCON • MAY 14, 2012
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
PRESENTATION tackmobile.com
41. Git Revert
More Like Git Reverse
PRESENTATION ANDEVCON • MAY 14, 2012
42. git revert
• Commits the reverse of a commit
• The previous commit is still there
• != svn revert
PRESENTATION tackmobile.com
43. Git Stash
Like a Little Repo In Your Repo
PRESENTATION ANDEVCON • MAY 14, 2012
44. git stash
• remember: git help stash
• Stash away changes in a safe place
PRESENTATION tackmobile.com
45. Branching
Hitting Save Before You Fight the Level Boss
PRESENTATION ANDEVCON • MAY 14, 2012
47. How To Think About Branching
• Mainline
• What do you want “master” to mean?
• Topic Branches
• Branching examples
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
52. Branching: Rebasing
master
fb4f5d9 c5083fa 3f43fa3
add_login_activity
before 9aa8827 fe594ce ccb6f5e
master
fb4f5d9 c5083fa 3f43fa3
add_login_activity
after 9aa8827 fe594ce ccb6f5e
`git rebase master`
PRESENTATION tackmobile.com
53. Branching: Rebasing
• Better than merging in some ways...
• Don’t use if you’ve pushed your branch to a remote
• Can override with `git push -force`
PRESENTATION tackmobile.com
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`
PRESENTATION tackmobile.com
55. Cherry Pick
I’ll Take One Of Those... And One Of Those...
PRESENTATION ANDEVCON • MAY 14, 2012
56. Cherry-pick
git cherry-pick fe594ce
A new commit with
master the changes from
fe594ce
fb4f5d9 c5083fa 3f43fa3
add_login_activity
9aa8827 fe594ce ccb6f5e
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
59. Whoops!
Lots Of Ways To Fix It
PRESENTATION ANDEVCON • MAY 14, 2012
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
PRESENTATION tackmobile.com
62. git reset soft
• git reset --soft [commit]
• Moves HEAD to commit
• Puts the “popped” contents on the index
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
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
PRESENTATION tackmobile.com
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!
PRESENTATION tackmobile.com
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.
PRESENTATION tackmobile.com
67. Thank you!
#AnDevCon
@tackmobile
@thillerson
http://github.com/thillerson
http://slideshare.com/thillerson
For the Android Developer • Tony Hillerson • AnDevCon Spring 2012
PRESENTATION tackmobile.com