Documentation Source Text

Check-in [50c596f536]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add the Why SQLite Does Not Use Git document. (Cherrypick from trunk)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | version-3.23
Files: files | file ages | folders
SHA3-256: 50c596f53674c77250b7ed34e86d8555ee4ad1606dd870aff88c00e2bf6165b1
User & Date: drh 2018-04-10 00:24:12
Context
2018-04-10
00:29
Fix a typo in the whynotgit.html document. Leaf check-in: 737022637a user: drh tags: version-3.23
00:24
Add the Why SQLite Does Not Use Git document. (Cherrypick from trunk) check-in: 50c596f536 user: drh tags: version-3.23
00:21
Add the Why SQLite Does Not Use Git document. check-in: 1b4a90faa0 user: drh tags: trunk
2018-04-09
22:34
Fix typos in cpu.html. check-in: fc3877b543 user: drh tags: version-3.23
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Added pages/whynotgit.in.

            1  +<title>Why SQLite Does Not Use Git?</title>
            2  +
            3  +<table_of_contents>
            4  +
            5  +<h1>Introduction</h1>
            6  +
            7  +<p>
            8  +SQLite does not use the
            9  +[https://git-scm.org|Git] version control system.
           10  +SQLite uses
           11  +[https://fossil-scm.org/|Fossil] instead.
           12  +Fossil and Git are both block-chain version-control systems.
           13  +They are both "distributed".  They both store content has a 
           14  +sequence of immutable check-ins identified by a cryptographic
           15  +hash.  Git is wildly popular, to the point that many younger
           16  +developers are familiar with nothing else.  And yet, the developers
           17  +of SQLite prefer Fossil.  This article tries to explain why.
           18  +
           19  +<h1>A Few Reasons Why SQLite Does Not Use Git</h1>
           20  +
           21  +<ol>
           22  +<li><p>
           23  +With Git, it is very difficult to find the successors (decendents) of
           24  +a check-in.
           25  +
           26  +<p>
           27  +Git allows you to go backwards in time.  Given the latest
           28  +check-in on a branch, Git lets you see all the ancestors of that
           29  +check-in.  But Git makes it very difficult to move in the other
           30  +direction.  Given some historical check-in, it is quite challenging
           31  +in Git to find out what came next.  It can be done, but it is sufficiently
           32  +difficult and slow that nobody ever does it.  There is no button in
           33  +GitHub that shows the descendents of a check-in.
           34  +
           35  +<p>
           36  +This is a deal-breaker, a show-stopper.  The principle maintainer
           37  +of SQLite cannot function effectively without being able to view
           38  +the successors of a check-in.  This one issue is sufficient reason
           39  +to not use Git, in the view of the designer of SQLite.
           40  +
           41  +<li><p>
           42  +The mental model for Git is needlessly complex and consequently
           43  +distracts attention from software under development.  A user of Git
           44  +needs to keep all of the following in mind:
           45  +<ol type='a'>
           46  +<li> The working directory
           47  +<li> The "index" or staging area
           48  +<li> The local head
           49  +<li> The local copy of the remote head
           50  +<li> The actual remote head
           51  +</ol>
           52  +<p>
           53  +Git contains commands (or options on commands) for moving and
           54  +comparing content between all of these locations. 
           55  +
           56  +<p>In contrast,
           57  +Fossil users only need to think about their working directory and
           58  +the check-in they are working on.  That is 60% less distraction.
           59  +Every developer has a finite number of brain-cycles.  Fossil
           60  +requires fewer brain-cycles to operate, thus freeing up 
           61  +intellectual resources to focus on the software under development.
           62  +
           63  +<li><p>
           64  +Git does not track branch history.  This makes review of historical
           65  +branches tedious.
           66  +
           67  +<p>
           68  +As an example, consider display of a single historical
           69  +branch of SQLite as rendered by GitHub and by Fossil:
           70  +
           71  +<ul>
           72  +<li><b>GitHub:</b> [https://github.com/mackyle/sqlite/commits/prefer-coroutine-sort-subquery]
           73  +<li><b>Fossil:</b> [https://sqlite.org/src/timeline?r=prefer-coroutine-sort-subquery]
           74  +</ul>
           75  +
           76  +<p>
           77  +The Fossil view clearly shows that the branch was eventually merged back into
           78  +trunk.  It shows where the branch started, and it shows two occasions where changes
           79  +on trunk were merged into the branch.  GitHub shows none of this.  In fact, the
           80  +GitHub display is mostly useless in trying to figure out what happened.
           81  +
           82  +<li><p>
           83  +Git lacks native wiki and bug tracking.
           84  +If you want these essential features, you have to install additional software
           85  +such as GitLab, or else use a third-party service such as GitHub.  And even
           86  +then, the wiki and bug reports are centralized, not distributed.
           87  +
           88  +<li><p>
           89  +Git requires more administrative support.
           90  +Setting up a website for a project to use Git requires a lot more software,
           91  +and a lot more work, than setting up a similar site with an integrated package
           92  +like Fossil.
           93  +
           94  +<li><p>Nobody really understands Git.
           95  +<img src="https://www.fossil-scm.org/fossil/doc/trunk/www/xkcd-git.gif"><br>
           96  +(credit: [https://xkcd.com/1597/])
           97  +</ol>
           98  +
           99  +<h2>See Also</h2>
          100  +
          101  +<p>Other pages that talk about Fossil and Git include:
          102  +<ul>
          103  +<li><p>[https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki|Fossil vs. Git]
          104  +<li><p>[https://www.fossil-scm.org/fossil/doc/trunk/www/quotes.wiki|What others say about Fossil and Git]
          105  +</ul>
          106  +
          107  +<h1>A Git-User's Guide To Accessing SQLite Source Code</h1>
          108  +
          109  +<p>
          110  +If you are a devoted Git user and have no intention of changing,
          111  +you can still easily access SQLite.  This section gives some hints
          112  +on how to do so.
          113  +
          114  +<h2>GitHub Mirrors</h2>
          115  +
          116  +<p>
          117  +There is a mirror of the SQLite source tree on GitHub at
          118  +[https://github.com/mackyle/sqlite].  This mirror is maintained
          119  +by user "mackyle" who is unaffiliated with, and unknown to,
          120  +the official SQLite development team.  We do not know mackyle,
          121  +but we observe that he does a terrific job of keeping his mirror
          122  +current, and so if you want to access the SQLite source code on
          123  +GitHub, his mirror is the recommended source.
          124  +
          125  +<h2>Web Access</h2>
          126  +
          127  +<p>
          128  +The [https://sqlite.org/src/timeline|SQLite Fossil Repository] contains links
          129  +for downloading  a Tarball, ZIP Archive, or [SQLite Archive] for any
          130  +historical version of SQLite.  The URLs for these downloads are
          131  +simple and can be incorporated easily into automated tools.  The format is:
          132  +
          133  +<center>
          134  +<tt>https://sqlite.org/src/tarball/</tt><i>VERSION</i><tt>/sqlite.tar.gz</tt>
          135  +</center>
          136  +
          137  +<p>
          138  +Simply replace <i>VERSION</i> with some description of the version to be
          139  +downloaded.  The <i>VERSION</i> can be a prefix of the cryptographic hash
          140  +name of a specific check-in, or the name of a branch (in which case the
          141  +most recent version of the branch is fetched) or a tag for a specific
          142  +check-in like "version-3.23.0".
          143  +
          144  +<h2>Fossil Access</h2>
          145  +
          146  +<p>
          147  +Fossil is really easy to install and use.  Here are the steps for unix.
          148  +(Windows is similar.)
          149  +
          150  +<ol>
          151  +<li>
          152  +Download the self-contained Fossil executable from
          153  +[https://fossil-scm.org/fossil/uv/download.html] and put the executable
          154  +somewhere on your $PATH.
          155  +<li><tt>mkdir ~/fossils</tt>
          156  +<li><tt>fossil clone https://fossil-scm.org/fossil ~/fossils/sqlite.fossil</tt>
          157  +<li><tt>mkdir ~/sqlite; cd ~/sqlite</tt>
          158  +<li><tt>fossil open ~/sqlite.fossil .</tt>
          159  +</ol>
          160  +
          161  +<p>
          162  +Subsequently, to update your check-out, simply type:
          163  +
          164  +<blockquote>
          165  +<tt>fossil up </tt><i>VERSION</i>
          166  +</blockquote>
          167  +
          168  +<p>
          169  +Use "trunk" for version to get the latest trunk version of SQLite.
          170  +Or use a prefix of a cryptographic hash name, or the name of some branch
          171  +or tag.
          172  +
          173  +<p>
          174  +Use the "<tt>fossil ui</tt>" command from within the ~/sqlite checkout to
          175  +bring up a local copy of the website.