{"id":226,"date":"2009-09-01T17:35:34","date_gmt":"2009-09-01T22:35:34","guid":{"rendered":"http:\/\/blog.red-bean.com\/sussman\/?p=226"},"modified":"2009-09-15T09:53:39","modified_gmt":"2009-09-15T14:53:39","slug":"git","status":"publish","type":"post","link":"http:\/\/blog.red-bean.com\/sussman\/?p=226","title":{"rendered":"Git."},"content":{"rendered":"<p>(Apologies to the <a href=\"http:\/\/www.rants.org\/ed.html\">original poster<\/a>.  I noticed the &#8216;name&#8217; line of the git manpage today and got inspired.)<\/p>\n<p><code><br \/>\nFrom: sussman@red-bean.com (Ben Collins-Sussman)<br \/>\nSender: cooks@red-bean.com<br \/>\nSubject: The True Path (long)<br \/>\nDate: 01 Sep 09 03:17:31 GMT<br \/>\nNewsgroups: alt.religion.version-control<\/p>\n<p>When I log into my SunOS 4.2 system with my 28.8kbps modem, both svn<br \/>\n*and* hg are just too damn slow.  They print useless messages like,<br \/>\n\"Type 'svn help' for usage\" and \"abort: There is no Mercurial<br \/>\nrepository here\".  So I use the version control system that doesn't<br \/>\nwaste my VALUABLE time.<\/p>\n<p>git, man!  !man git<\/p>\n<p>GIT(7)              Git Manual                           GIT(7)<\/p>\n<p>NAME<br \/>\n       git - the stupid content tracker<\/p>\n<p>SYNOPSIS<br \/>\n           git [--version] [--exec-path[=GIT_EXEC_PATH]]<br \/>\n               [-p|--paginate|--no-pager]<br \/>\n               [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]<br \/>\n               [--help] COMMAND [ARGS]<\/p>\n<p>DESCRIPTION<br \/>\n       Git is a fast, scalable, distributed revision control<br \/>\n       system with an unusually rich command set that provides both<br \/>\n       high-level operations and full access to internals.<\/p>\n<p>---<\/p>\n<p>Computer Scientists love git, not just because it comes first<br \/>\nalphabetically, but because it's stupid.  Everyone else loves git<br \/>\nbecause it's GIT!<\/p>\n<p>\"Git is the stupid content tracker.\"<\/p>\n<p>And git doesn't waste space on my Newton MessagePad.  Just look:<\/p>\n<p>-rwxr-xr-x  1 root          24 Oct 29  2009 \/bin\/git<br \/>\n-rwxr-xr-t  4 root     1310720 Jan  1  2005 \/usr\/bin\/hg<br \/>\n-rwxr-xr-x  1 root  5.89824e37 Oct 22  2001 \/usr\/local\/subversion\/bin\/svn<\/p>\n<p>Of course, on the system *I* administrate, hg is symlinked to git.<br \/>\nsvn has been replaced by a shell script which 1) Generates a syslog<br \/>\nmessage at level LOG_EMERG; 2) reduces the user's disk quota by 10GB;<br \/>\nand 3) RUNS GIT!!!!!!<\/p>\n<p>\"Git is the stupid content tracker.\"<\/p>\n<p>Let's look at a typical novice's session with the mighty git:<\/p>\n<p>$ git add *<br \/>\nfatal: Not a git repository<\/p>\n<p>$ git checkout<br \/>\nfatal: Not a git repository<br \/>\nFailed to find a valid git directory.<\/p>\n<p>$ git git<br \/>\ngit: 'git' is not a git-command. See 'git --help'.<\/p>\n<p>$ git --help<\/p>\n<p>$ git over here<br \/>\ngit: 'over' is not a git-command. See 'git --help'.<\/p>\n<p>$ git \"eat flaming death\"<\/p>\n<p>---<br \/>\nNote the consistent user interface and error reportage.  Git is<br \/>\ngenerous enough to flag errors and pack repositories as dense as<br \/>\nneutron stars, yet prudent enough not to overwhelm the novice with<br \/>\nuseless details.  If users REALLY want to know what git commands are<br \/>\navailable, a simple 'man git' will reveal them all, sheer genius<br \/>\nin its simplicity:<\/p>\n<p>       git-add(1)<br \/>\n       git-am(1)<br \/>\n       git-archive(1)<br \/>\n       git-bisect(1)<br \/>\n       git-branch(1)<br \/>\n       git-bundle(1)<br \/>\n       git-checkout(1)<br \/>\n       git-cherry-pick(1)<br \/>\n       git-citool(1)<br \/>\n       git-clean(1)<br \/>\n       git-clone(1)<br \/>\n       git-commit(1)<br \/>\n       git-describe(1)<br \/>\n       git-diff(1)<br \/>\n       git-fetch(1)<br \/>\n       git-format-patch(1)<br \/>\n       git-gc(1)<br \/>\n       git-grep(1)<br \/>\n       git-gui(1)<br \/>\n       git-init(1)<br \/>\n       git-log(1)<br \/>\n       git-merge(1)<br \/>\n       git-mv(1)<br \/>\n       git-pull(1)<br \/>\n       git-push(1)<br \/>\n       git-rebase(1)<br \/>\n       git-reset(1)<br \/>\n       git-revert(1)<br \/>\n       git-rm(1)<br \/>\n       git-shortlog(1)<br \/>\n       git-show(1)<br \/>\n       git-stash(1)<br \/>\n       git-status(1)<br \/>\n       git-submodule(1)<br \/>\n       git-tag(1)<br \/>\n       gitk(1)<br \/>\n       git-config(1)<br \/>\n       git-fast-export(1)<br \/>\n       git-fast-import(1)<br \/>\n       git-filter-branch(1)<br \/>\n       git-lost-found(1)<br \/>\n       git-mergetool(1)<br \/>\n       git-pack-refs(1)<br \/>\n       git-prune(1)<br \/>\n       git-reflog(1)<br \/>\n       git-relink(1)<br \/>\n       git-remote(1)<br \/>\n       git-repack(1)<br \/>\n       git-repo-config(1)<br \/>\n       git-annotate(1)<br \/>\n       git-blame(1)<br \/>\n       git-cherry(1)<br \/>\n       git-count-objects(1)<br \/>\n       git-fsck(1)<br \/>\n       git-get-tar-commit-id(1)<br \/>\n       git-help(1)<br \/>\n       git-instaweb(1)<br \/>\n       git-merge-tree(1)<br \/>\n       git-rerere(1)<br \/>\n       git-rev-parse(1)<br \/>\n       git-show-branch(1)<br \/>\n       git-verify-tag(1)<br \/>\n       git-whatchanged(1)<br \/>\n       git-archimport(1)<br \/>\n       git-cvsexportcommit(1)<br \/>\n       git-cvsimport(1)<br \/>\n       git-cvsserver(1)<br \/>\n       git-imap-send(1)<br \/>\n       git-quiltimport(1)<br \/>\n       git-request-pull(1)<br \/>\n       git-send-email(1)<br \/>\n       git-svn(1)<br \/>\n       git-apply(1)<br \/>\n       git-checkout-index(1)<br \/>\n       git-commit-tree(1)<br \/>\n       git-hash-object(1)<br \/>\n       git-index-pack(1)<br \/>\n       git-merge-file(1)<br \/>\n       git-merge-index(1)<br \/>\n       git-mktag(1)<br \/>\n       git-mktree(1)<br \/>\n       git-pack-objects(1)<br \/>\n       git-prune-packed(1)<br \/>\n       git-read-tree(1)<br \/>\n       git-symbolic-ref(1)<br \/>\n       git-unpack-objects(1)<br \/>\n       git-update-index(1)<br \/>\n       git-update-ref(1)<br \/>\n       git-write-tree(1)<br \/>\n       git-cat-file(1)<br \/>\n       git-diff-files(1)<br \/>\n       git-diff-index(1)<br \/>\n       git-diff-tree(1)<br \/>\n       git-for-each-ref(1)<br \/>\n       git-ls-files(1)<br \/>\n       git-ls-remote(1)<br \/>\n       git-ls-tree(1)<br \/>\n       git-merge-base(1)<br \/>\n       git-name-rev(1)<br \/>\n       git-pack-redundant(1)<br \/>\n       git-rev-list(1)<br \/>\n       git-show-index(1)<br \/>\n       git-show-ref(1)<br \/>\n       git-tar-tree(1)<br \/>\n       git-unpack-file(1)<br \/>\n       git-var(1)<br \/>\n       git-verify-pack(1)<br \/>\n       git-daemon(1)<br \/>\n       git-fetch-pack(1)<br \/>\n       git-send-pack(1)<br \/>\n       git-update-server-info(1)<br \/>\n       git-http-fetch(1)<br \/>\n       git-http-push(1)<br \/>\n       git-parse-remote(1)<br \/>\n       git-receive-pack(1)<br \/>\n       git-shell(1)<br \/>\n       git-upload-archive(1)<br \/>\n       git-upload-pack(1)<br \/>\n       git-check-attr(1)<br \/>\n       git-check-ref-format(1)<br \/>\n       git-fmt-merge-msg(1)<br \/>\n       git-mailinfo(1)<br \/>\n       git-mailsplit(1)<br \/>\n       git-merge-one-file(1)<br \/>\n       git-patch-id(1)<br \/>\n       git-peek-remote(1)<br \/>\n       git-sh-setup(1)<br \/>\n       git-stripspace(1)<\/p>\n<p>\"Git is the stupid content tracker.\"<\/p>\n<p>Git, the greatest WYGIWYG revision control system of all.<\/p>\n<p>GIT IS THE TRUE PATH TO NIRVANA!  GIT HAS BEEN THE CHOICE OF EDUCATED<br \/>\nAND IGNORANT ALIKE FOR CENTURIES!  GIT WILL NOT CORRUPT YOUR PRECIOUS<br \/>\nBODILY FLUIDS!!  GIT IS THE STUPID CONTENT TRACKER!  GIT MAKES THE SUN<br \/>\nSHINE AND THE BIRDS SING AND THE GRASS GREEN!!  GIT WAS HANDED DOWN TO<br \/>\nUS FROM LINUS UPON THE MOUNTAIN, AND LINUX USERS SHALL NOT WORSHIP ANY<br \/>\nOTHER TRACKER!<\/p>\n<p>When I use a version control system, I don't want eight extra<br \/>\nMEGABYTES of worthless HTTP protocol support.  I just want to GIT on<br \/>\nwith my coding!  I don't want to subvert away or mercurialize!<br \/>\nThose aren't even WORDS!!!  GIT!  GIT! GIT IS THE STUPID!!!<\/p>\n<p>CONTENT TRACKER.<\/p>\n<p>When Linus, in his ever-present omnipotence, needed to base his patch<br \/>\njuggling habits on existing tools, did he mimic svn?  No.  Hg?  Surely<br \/>\nyou jest.  He created the most karmic version tracker of all.  The<br \/>\nstupid one.<\/p>\n<p>Git is for those who can *remember* what project they are working on.<br \/>\nIf you are an idiot, you should use subversion.  If you are<br \/>\nsubversive, you should not be mercurial.  If you use GIT, you are on<br \/>\nTHE PATH TO REDEMPTION.  THE SO-CALLED \"FRIENDLY\" SCM SYSTEMS HAVE<br \/>\nBEEN PLACED HERE BY GIT TO TEMPT THE FAITHLESS.  DO NOT GIVE IN!!!  THE<br \/>\nMIGHTY LINUS HAS SPOKEN!!!<\/p>\n<p>?<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Apologies to the original poster. I noticed the &#8216;name&#8217; 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-226","post","type-post","status-publish","format-standard","hentry","category-computers"],"_links":{"self":[{"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=\/wp\/v2\/posts\/226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=226"}],"version-history":[{"count":4,"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=\/wp\/v2\/posts\/226\/revisions"}],"predecessor-version":[{"id":230,"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=\/wp\/v2\/posts\/226\/revisions\/230"}],"wp:attachment":[{"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=226"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.red-bean.com\/sussman\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}