Smalltalk on Git
Upcoming SlideShare
Loading in...5

Smalltalk on Git



An introduction on using git and git-svn.

An introduction on using git and git-svn.



Total Views
Views on SlideShare
Embed Views



1 Embed 11 11



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.


11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Fioricet is often prescribed for tension headaches caused by contractions of the muscles in the neck and shoulder area. Buy now from and make a deal for you.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Smalltalk on Git Smalltalk on Git Presentation Transcript

    • Git in a Nutshell Sort of... Mathias Meyer Ruby User Group Berlin
    • What the git? • Git is not the next Subversion • Git is a content tracker • Git is almost a versioned file system • Git is distributed
    • What the git? • Git is a huge collection of commands • Git is f***ing fast
    • 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,, Wine, Rubinius and Linux (whoa!) • Started out focused on development with a central maintainer
    • 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
    • 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
    • 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
    • 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
    • Tree • A simple structure containing names of blobs and other trees • Represents a snapshot of the source tree
    • 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
    • Tag • Glued to a specific object • Marks a specific point in the Git timeline with a name
    • HEAD branch commit tree tree blob tree blob blob
    • Git Branches • master - default development branch • origin - default upstream branch • HEAD - current branch
    • 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....
    • 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
    • Git Branches Rrright.
    • 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
    • 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
    • How Do I Get Started? • mkdir project.git • cd project.git • git init • Start hacking
    • How Do I Get Started? • Or go to GitHub • Best GUI for Git evah
    • Everyday Git • Some of the commonly used Git commands • Called the Porcelain
    • Set up camp • git config --global “Mathias Meyer” • git config --global “”
    • git clone • Creates a local working copy of a remote project • git clone git:// macistrano.git
    • git checkout • Checks out code from a branch • Will overwrite your local changes • git checkout -b will create a branch and check it out
    • git branch • Shows, creates and deletes branches • git branch master * show_me_the_money • git branch new_branch • git branch -d new_branch
    • git fetch • Fetches all objects from a remote repository which are not in the local repository
    • git add • Schedule changes in one or more files for the next commit
    • git rm • Removes files
    • git mv • Moves files and directories around
    • 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
    • git status • Shows staged and unstaged changes • staged = added • unstaged = new, conflicts, changed
    • git push • Pushes your changes to a remote repository • git push origin pushes the current branch • git push origin master pushes the master branch
    • git pull • Different way to do a merge • git pull = git fetch + git merge
    • git log • Shows the commit history • Can be verbose if you want it to
    • 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
    • git tag • Duh! • Associates a tag with the
    • 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
    • git show • Shows the details of a specified, or the last commit
    • git archive • Creates an export of your repository • Default is tar • Convenient, no? • git archive release_2_1 > release_2_1.tar
    • 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
    • Git-Svn • The gateway drug for Subversion users • Warning:You don’t want to use the svn command ever again • Ever!
    • Git-Svn • Basically a couple of Perl scripts • Using the Subversion bindings • Translates Subversion commits to Git commits and vice versa
    • Show me how! • mkdir webistrano • git svn init -s webistrano • git svn fetch • Get a coffee...
    • Everyday Git-Svn • git checkout -b make_me_rich • ...endless hours of coding... • ...and writing tests... • git add lib/monetize.rb spec/monetize_spec.rb • git commit
    • Everyday Git-Svn - Merging • git commit -a • git checkout master • git svn rebase • git merge make_me_rich • tests... • git svn dcommit • git branch -d make_me_rich
    • 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
    • Everyday Git-Svn - Merging • The alternative • dcommit from the branch • rebase the changes on master
    • 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
    • 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
    • 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!
    • 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
    • The Bad Stuff • Poor documentation, be prepared to spend some time on Google • Complex beast, lots of small commands • No API
    • Resources • Git Home ( • Git User’s Manual ( software/scm/git/docs/user-manual.html) • Git PeepCode ( git) • Must-read: Git Internals ( products/git-internals-pdf) • GitCasts (