Smalltalk on Git

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    3 Favorites

    Smalltalk on Git - Presentation 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/)

    + mattmattmattmatt, 2 years ago

    custom

    2252 views, 3 favs, 0 embeds more stats

    An introduction on using git and git-svn.

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 2252
      • 2252 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 45
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Tags