Smalltalk on Git
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Smalltalk on Git

  • 7,565 views
Uploaded on

An introduction on using git and git-svn.

An introduction on using git and git-svn.

More in: Technology
  • 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 http://www.fioricetsupply.com and make a deal for you.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
7,565
On Slideshare
7,554
From Embeds
11
Number of Embeds
1

Actions

Shares
Downloads
162
Comments
1
Likes
9

Embeds 11

http://www.slideshare.net 11

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 16. Git Branches Rrright.
  • 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
  • 25. git branch • Shows, creates and deletes branches • git branch master * show_me_the_money • git branch new_branch • git branch -d new_branch
  • 26. git fetch • Fetches all objects from a remote repository which are not in the local repository
  • 27. git add • Schedule changes in one or more files for the next commit
  • 28. git rm • Removes files
  • 29. git mv • Moves files and directories around
  • 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
  • 33. git pull • Different way to do a merge • git pull = git fetch + git merge
  • 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
  • 36. git tag • Duh! • Associates a tag with the
  • 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
  • 38. git show • Shows the details of a specified, or the last commit
  • 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...
  • 44. 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
  • 45. Everyday Git-Svn - Merging • git commit -a • git checkout master • git svn rebase • git merge make_me_rich • ...run tests... • git svn dcommit • git branch -d make_me_rich
  • 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
  • 53. Resources • Git Home (http://www.git.or.cz) • Git User’s Manual (http://www.kernel.org/pub/ software/scm/git/docs/user-manual.html) • Git PeepCode (http://peepcode.com/products/ git) • Must-read: Git Internals (http://peepcode.com/ products/git-internals-pdf) • GitCasts (http://www.gitcasts.com/)