Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Git For The Android Developer
1. Git
For the Android Developer
Tony Hillerson, AnDevCon Fall 2011
#AnDevCon #effectiveui @thillerson
http://www.slideshare.net/thillerson/git-for-android-developers
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
9. Tagging
git tag -a -m"Tagging v1.0" v1.0 c5083fa
master
Mac
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
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. 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. Getting Set Up on Mac
➡ Homebrew - http://mxcl.github.com/homebrew/
➡ MacPorts - http://www.macports.org/
16. Getting Set Up on Windows
➡ msysgit -http://code.google.com/p/msysgit/
17. Getting Set Up on Linux
➡ apt, etc - you probably know the drill
18. Gooies!
➡ Git Tower - http://git-tower.com M
➡ Brother
Mac
Bard’s GitX fork - A
http://brotherbard.com/blog/2010/03/experimental-gitx-fork/ C
➡ Tortoise Git - http://code.google.com/p/tortoisegit/ W
Mac
I
N
22. The Guts of Git
The 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
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
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
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_activity
master
Mac
fb4f5d9 c5083fa
add_login_activity
Mac
9aa8827 fe594ce ccb6f5e
52. Branching: Rebasing
master
Mac
fb4f5d9 c5083fa 3f43fa3
add_login_activity
before Mac
9aa8827 fe594ce ccb6f5e
master
Mac
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`
56. Cherry-pick
git cherry-pick fe594ce
A new commit with
master the changes from
fe594ce
Mac
fb4f5d9 c5083fa 3f43fa3
add_login_activity
Mac
9aa8827 fe594ce ccb6f5e
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
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
http://github.com/thillerson
http://slideshare.com/thillerson
Half Off My Git Course These Slides
Git For the Android Developer • Tony Hillerson • AnDevCon Fall 2011