Git.

This entry was posted by on Tuesday, 1 September, 2009 at

(Apologies to the original poster. I noticed the ‘name’ line of the git manpage today and got inspired.)


From: sussman@red-bean.com (Ben Collins-Sussman)
Sender: cooks@red-bean.com
Subject: The True Path (long)
Date: 01 Sep 09 03:17:31 GMT
Newsgroups: alt.religion.version-control

When I log into my SunOS 4.2 system with my 28.8kbps modem, both svn
*and* hg are just too damn slow. They print useless messages like,
"Type 'svn help' for usage" and "abort: There is no Mercurial
repository here". So I use the version control system that doesn't
waste my VALUABLE time.

git, man! !man git

GIT(7) Git Manual GIT(7)

NAME
git - the stupid content tracker

SYNOPSIS
git [--version] [--exec-path[=GIT_EXEC_PATH]]
[-p|--paginate|--no-pager]
[--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
[--help] COMMAND [ARGS]

DESCRIPTION
Git is a fast, scalable, distributed revision control
system with an unusually rich command set that provides both
high-level operations and full access to internals.

---

Computer Scientists love git, not just because it comes first
alphabetically, but because it's stupid. Everyone else loves git
because it's GIT!

"Git is the stupid content tracker."

And git doesn't waste space on my Newton MessagePad. Just look:

-rwxr-xr-x 1 root 24 Oct 29 2009 /bin/git
-rwxr-xr-t 4 root 1310720 Jan 1 2005 /usr/bin/hg
-rwxr-xr-x 1 root 5.89824e37 Oct 22 2001 /usr/local/subversion/bin/svn

Of course, on the system *I* administrate, hg is symlinked to git.
svn has been replaced by a shell script which 1) Generates a syslog
message at level LOG_EMERG; 2) reduces the user's disk quota by 10GB;
and 3) RUNS GIT!!!!!!

"Git is the stupid content tracker."

Let's look at a typical novice's session with the mighty git:

$ git add *
fatal: Not a git repository

$ git checkout
fatal: Not a git repository
Failed to find a valid git directory.

$ git git
git: 'git' is not a git-command. See 'git --help'.

$ git --help

$ git over here
git: 'over' is not a git-command. See 'git --help'.

$ git "eat flaming death"

---
Note the consistent user interface and error reportage. Git is
generous enough to flag errors and pack repositories as dense as
neutron stars, yet prudent enough not to overwhelm the novice with
useless details. If users REALLY want to know what git commands are
available, a simple 'man git' will reveal them all, sheer genius
in its simplicity:

git-add(1)
git-am(1)
git-archive(1)
git-bisect(1)
git-branch(1)
git-bundle(1)
git-checkout(1)
git-cherry-pick(1)
git-citool(1)
git-clean(1)
git-clone(1)
git-commit(1)
git-describe(1)
git-diff(1)
git-fetch(1)
git-format-patch(1)
git-gc(1)
git-grep(1)
git-gui(1)
git-init(1)
git-log(1)
git-merge(1)
git-mv(1)
git-pull(1)
git-push(1)
git-rebase(1)
git-reset(1)
git-revert(1)
git-rm(1)
git-shortlog(1)
git-show(1)
git-stash(1)
git-status(1)
git-submodule(1)
git-tag(1)
gitk(1)
git-config(1)
git-fast-export(1)
git-fast-import(1)
git-filter-branch(1)
git-lost-found(1)
git-mergetool(1)
git-pack-refs(1)
git-prune(1)
git-reflog(1)
git-relink(1)
git-remote(1)
git-repack(1)
git-repo-config(1)
git-annotate(1)
git-blame(1)
git-cherry(1)
git-count-objects(1)
git-fsck(1)
git-get-tar-commit-id(1)
git-help(1)
git-instaweb(1)
git-merge-tree(1)
git-rerere(1)
git-rev-parse(1)
git-show-branch(1)
git-verify-tag(1)
git-whatchanged(1)
git-archimport(1)
git-cvsexportcommit(1)
git-cvsimport(1)
git-cvsserver(1)
git-imap-send(1)
git-quiltimport(1)
git-request-pull(1)
git-send-email(1)
git-svn(1)
git-apply(1)
git-checkout-index(1)
git-commit-tree(1)
git-hash-object(1)
git-index-pack(1)
git-merge-file(1)
git-merge-index(1)
git-mktag(1)
git-mktree(1)
git-pack-objects(1)
git-prune-packed(1)
git-read-tree(1)
git-symbolic-ref(1)
git-unpack-objects(1)
git-update-index(1)
git-update-ref(1)
git-write-tree(1)
git-cat-file(1)
git-diff-files(1)
git-diff-index(1)
git-diff-tree(1)
git-for-each-ref(1)
git-ls-files(1)
git-ls-remote(1)
git-ls-tree(1)
git-merge-base(1)
git-name-rev(1)
git-pack-redundant(1)
git-rev-list(1)
git-show-index(1)
git-show-ref(1)
git-tar-tree(1)
git-unpack-file(1)
git-var(1)
git-verify-pack(1)
git-daemon(1)
git-fetch-pack(1)
git-send-pack(1)
git-update-server-info(1)
git-http-fetch(1)
git-http-push(1)
git-parse-remote(1)
git-receive-pack(1)
git-shell(1)
git-upload-archive(1)
git-upload-pack(1)
git-check-attr(1)
git-check-ref-format(1)
git-fmt-merge-msg(1)
git-mailinfo(1)
git-mailsplit(1)
git-merge-one-file(1)
git-patch-id(1)
git-peek-remote(1)
git-sh-setup(1)
git-stripspace(1)

"Git is the stupid content tracker."

Git, the greatest WYGIWYG revision control system of all.

GIT IS THE TRUE PATH TO NIRVANA! GIT HAS BEEN THE CHOICE OF EDUCATED
AND IGNORANT ALIKE FOR CENTURIES! GIT WILL NOT CORRUPT YOUR PRECIOUS
BODILY FLUIDS!! GIT IS THE STUPID CONTENT TRACKER! GIT MAKES THE SUN
SHINE AND THE BIRDS SING AND THE GRASS GREEN!! GIT WAS HANDED DOWN TO
US FROM LINUS UPON THE MOUNTAIN, AND LINUX USERS SHALL NOT WORSHIP ANY
OTHER TRACKER!

When I use a version control system, I don't want eight extra
MEGABYTES of worthless HTTP protocol support. I just want to GIT on
with my coding! I don't want to subvert away or mercurialize!
Those aren't even WORDS!!! GIT! GIT! GIT IS THE STUPID!!!

CONTENT TRACKER.

When Linus, in his ever-present omnipotence, needed to base his patch
juggling habits on existing tools, did he mimic svn? No. Hg? Surely
you jest. He created the most karmic version tracker of all. The
stupid one.

Git is for those who can *remember* what project they are working on.
If you are an idiot, you should use subversion. If you are
subversive, you should not be mercurial. If you use GIT, you are on
THE PATH TO REDEMPTION. THE SO-CALLED "FRIENDLY" SCM SYSTEMS HAVE
BEEN PLACED HERE BY GIT TO TEMPT THE FAITHLESS. DO NOT GIVE IN!!! THE
MIGHTY LINUS HAS SPOKEN!!!

?

8 Responses to “Git.”

  1. filippo

    as seen on ERLANG: IT’S MUNCTIONAL
    http://www.youtube.com/watch?v=1yH_j8-VVLo

  2. Heh, very funny post. After I read git for svn users, I finally understood how to use git, but it still often throws me off, and gives me some error which I have no idea how to solve without STFWing or asking people on the IRC. And I’m still not sure that I understand its program model – see http://www.joelonsoftware.com/uibook/chapters/fog0000000058.html . I don’t recall ever having such a problem with Subversion, which mostly worked according to what I expected. And I still think git has a very counter-intuitive user-interface.

    Lately, I’ve been playing a little with Mercurial/hg and it seems nice and very easy to use and understand, but I admit that I haven’t really pushed it to its limit so far. It still seems to lack a little polish that svn has, but git is much worse.

  3. Jakub Narębski

    Just a note:

    When Linus, in his ever-present omnipotence, needed to base his patch
    juggling habits on existing tools, did he mimic svn? No. Hg? Surely
    you jest. He created the most karmic version tracker of all. The
    stupid one.

    He didn’t mimic Subversion, because it is centralized version control system, and Linux development needs distributed VCS. He did mimic BitKeeper UI / command naming, because it was what was used for Linux kernel development before.

    He didn’t mimic Hg (Mercurial), because it didn’t exist. Git and mercurial were created (independently) at roughly the same time.

    The name “stupid content tracker” is parially from the times when Git was just set of low level tools, and not yet proper SCM.

  4. Jakub Narębski

    $ git –help
    usage: git [–version] [–exec-path[=GIT_EXEC_PATH]] [–html-path] [-p|–paginate|–no-pager] [–bare] [–git-dir=GIT_DIR] [–work-tree=GIT_WORK_TREE] [–help] COMMAND [ARGS]

    The most commonly used git commands are:
    add Add file contents to the index
    bisect Find by binary search the change that introduced a bug
    branch List, create, or delete branches
    checkout Checkout a branch or paths to the working tree
    clone Clone a repository into a new directory
    commit Record changes to the repository
    diff Show changes between commits, commit and working tree, etc
    fetch Download objects and refs from another repository
    grep Print lines matching a pattern
    init Create an empty git repository or reinitialize an existing one
    log Show commit logs
    merge Join two or more development histories together
    mv Move or rename a file, a directory, or a symlink
    pull Fetch from and merge with another repository or a local branch
    push Update remote refs along with associated objects
    rebase Forward-port local commits to the updated upstream head
    reset Reset current HEAD to the specified state
    rm Remove files from the working tree and from the index
    show Show various types of objects
    status Show the working tree status
    tag Create, list, delete or verify a tag object signed with GPG

    See ‘git help COMMAND’ for more information on a specific command.

  5. A. direct. hit. I am a git fanboy and I run git on my ARM-based NAS box with 32MB RAM.

    But you forgot “everyone who figures out git writes his or her own slightly different git tutorial.”

  6. @Jakub: I think you’re taking me a little too seriously. I was just making a parody/tribute to the original ‘ed’ rant linked above. 🙂

  7. Jakub Narębski

    @Ben: Well, I understand this is a parody, but it is true that I didn’t catch that no output for “git –help” is following original ‘ed’ rant here.

  8. Stas Fomin

    Link http://www.rants.org/ed.html seems to be broken (404)…