Git.
(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!!!
?
as seen on ERLANG: IT’S MUNCTIONAL
http://www.youtube.com/watch?v=1yH_j8-VVLo
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.
Just a note:
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.
$ 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.
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.”
@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. 🙂
@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.
Link http://www.rants.org/ed.html seems to be broken (404)…