Strategies for Landing an Oracle DBA Job as a Fresher
Smalltalk on Git
1. Git in a Nutshell
Sort of...
Mathias Meyer
www.paperplanes.de
Ruby User Group Berlin
2. What the git?
• Git is not the next Subversion
• Git is a content tracker
• Git is almost a versioned file system
• Git is distributed
3. What the git?
• Git is a huge collection of commands
• Git is f***ing fast
4. Ancient History
• Developed to replace BitKeeper for the Linux
kernel development
• Started out as a couple of scripts built by Linus
Torvalds
• Used by Rails, Merb, Ubuntu, X.org, Wine,
Rubinius and Linux (whoa!)
• Started out focused on development with a
central maintainer
5. Basics
• Every working copy is a full-fledged repository
• Git only tracks content
• Content is identified by a hash
• Though that content has a name
• The same content is only stored once
6. Basics
• Everything is stored in one .git directory in the
top level of your working copy
• Git uses an index to find changes in the
working directory
• The index is a snapshot of a specific tree in the
repository
7. Git Objects
• Git knows four types of objects
• Have SHA1 IDs
• Can be addressed with the six first bytes of
the hash
• Are compressed with gzip
8. Commits
• Refers to a tree and usually a parent commit
(usually the commit before the current one)
• Can have two or more parents, then they
represent a merge
• Or no parent at all
• Stored with a log message
9. Tree
• A simple structure containing names of blobs
and other trees
• Represents a snapshot of the source tree
10. Blob
• Contains data, e.g. file content
• Blobs don’t have names
• Their names are derived from the tree
• Will be found through associations from trees
and commits
11. Tag
• Glued to a specific object
• Marks a specific point in the Git timeline with
a name
12. HEAD
branch
commit
tree
tree blob
tree blob
blob
13. Git Branches
• master - default development branch
• origin - default upstream branch
• HEAD - current branch
14. Git Branches
• HEAD~2, master^1, wtf?
• ~N references the Nth generation
grandparent of a commit
• ^N references the Nth parent of a commit,
only useful for merges of two or more
commits
• So....
15. Git Branches
• HEAD~2 is the second generation grand-
parent of the last commit on the current
branch
• master^2 is the second parent of the last
commit on master
• master~2^2 is the second parent of the
second generation grand-parent of the last
commit on the current branch
17. Git Branches
• Branches are cheap and easy
• A branch is an ID pointing to a tree and a
parent commit
• Merging is cheap, fast and almost painless
• Ergo: Branching in Git rocks
18. How Do I Get Git?
• MacPorts (port install git-core +svn)
• Git Installer for Leopard
• On every Linux distribution (apt-get|rpm
install git-core)
• On Windows? I think so
19. How Do I Get Started?
• mkdir project.git
• cd project.git
• git init
• Start hacking
20. How Do I Get Started?
• Or go to GitHub
• Best GUI for Git evah
21. Everyday Git
• Some of the commonly used Git commands
• Called the Porcelain
22. Set up camp
• git config --global user.name “Mathias Meyer”
• git config --global user.email
“meyer@paperplanes.de”
23. git clone
• Creates a local working copy of a remote
project
• git clone git://github.com/mattmatt/
macistrano.git
24. git checkout
• Checks out code from a branch
• Will overwrite your local changes
• git checkout -b will create a branch and check
it out
30. git commit
• Isn’t it obvious?
• It will check in your changes
• But only the ones you added
• Use git commit -a to check in all the changes
without adding them
• git commit <file> will commit the file without
the need to add it
31. git status
• Shows staged and unstaged changes
• staged = added
• unstaged = new, conflicts, changed
32. git push
• Pushes your changes to a remote repository
• git push origin pushes the current branch
• git push origin master pushes the master
branch
34. git log
• Shows the commit history
• Can be verbose if you want it to
35. git merge
• Merges the changes from a branch into your
current branch
• git merge rails_2_1
• And that’s that
• In case of conflicts, these need to be resolved
and then committed
37. git stash
• It’s like a clipboard in your repository
• Need to work on something else but don’t
want to commit your local changes yet?
• git stash save will save all your changes
• git stash apply will reapply them after you’re
done
• git stash list shows all the stashes
• git stash show shows the changes of a stash
39. git archive
• Creates an export of your repository
• Default is tar
• Convenient, no?
• git archive release_2_1 > release_2_1.tar
40. git ....
• There’s lots more
• Which you probably won’t need most of the
time
• You use 20 or so for everyday work
• Some of them only on special occasions
• git-<tab> and start digging
41. Git-Svn
• The gateway drug for Subversion users
• Warning:You don’t want to use the svn
command ever again
• Ever!
42. Git-Svn
• Basically a couple of Perl scripts
• Using the Subversion bindings
• Translates Subversion commits to Git commits
and vice versa
43. Show me how!
• mkdir webistrano
• git svn init -s http://labs.peritor.com/svn/
webistrano
• git svn fetch
• Get a coffee...
46. Everyday Git-Svn -
Merging
• The potentiel downside of using git merge:
• git svn dcommit will check in all the commits
from the branch in one single svn commit
47. Everyday Git-Svn -
Merging
• The alternative
• dcommit from the branch
• rebase the changes on master
48. Everyday Git-Svn -
Merging
• git commit -a
• git svn rebase # on branch make_me_rich
• git svn dcommit # on branch make_me_rich
• git checkout master
• git svn rebase
• git branch -d make_me_rich
49. Some Git Awesomeness
• Find out what commits will be ci’d to svn
• git svn dcommit -n (rather sparse)
• git cherry -v trunk (full glory)
• Commit partial changes of a file
• git add --patch
50. But I don’t like the CLI
• Use git gui for a “nicer” interface
• Use Gitk to visualize commits and branches
• For both: brace yourself to be blinded
• Much nicer, less powerful: GitNub
• TextMate bundle!
51. In the end...
• Git will blow your brains out
• In several ways
• It takes a while to get used to it
• But it’s totally worth it
• Even if you’re still using Subversion as a central
repository
52. The Bad Stuff
• Poor documentation, be prepared to spend
some time on Google
• Complex beast, lots of small commands
• No API