542 lines
22 KiB
HTML
542 lines
22 KiB
HTML
<!DOCTYPE html>
|
|
<html><head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
|
<link href="sqlite.css" rel="stylesheet">
|
|
<title>Why SQLite Does Not Use Git</title>
|
|
<!-- path= -->
|
|
</head>
|
|
<body>
|
|
<div class=nosearch>
|
|
<a href="index.html">
|
|
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
|
|
</a>
|
|
<div><!-- IE hack to prevent disappearing logo --></div>
|
|
<div class="tagline desktoponly">
|
|
Small. Fast. Reliable.<br>Choose any three.
|
|
</div>
|
|
<div class="menu mainmenu">
|
|
<ul>
|
|
<li><a href="index.html">Home</a>
|
|
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
|
|
<li class='wideonly'><a href='about.html'>About</a>
|
|
<li class='desktoponly'><a href="docs.html">Documentation</a>
|
|
<li class='desktoponly'><a href="download.html">Download</a>
|
|
<li class='wideonly'><a href='copyright.html'>License</a>
|
|
<li class='desktoponly'><a href="support.html">Support</a>
|
|
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
|
|
<li class='search' id='search_menubutton'>
|
|
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
|
|
</ul>
|
|
</div>
|
|
<div class="menu submenu" id="submenu">
|
|
<ul>
|
|
<li><a href='about.html'>About</a>
|
|
<li><a href='docs.html'>Documentation</a>
|
|
<li><a href='download.html'>Download</a>
|
|
<li><a href='support.html'>Support</a>
|
|
<li><a href='prosupport.html'>Purchase</a>
|
|
</ul>
|
|
</div>
|
|
<div class="searchmenu" id="searchmenu">
|
|
<form method="GET" action="search">
|
|
<select name="s" id="searchtype">
|
|
<option value="d">Search Documentation</option>
|
|
<option value="c">Search Changelog</option>
|
|
</select>
|
|
<input type="text" name="q" id="searchbox" value="">
|
|
<input type="submit" value="Go">
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
function toggle_div(nm) {
|
|
var w = document.getElementById(nm);
|
|
if( w.style.display=="block" ){
|
|
w.style.display = "none";
|
|
}else{
|
|
w.style.display = "block";
|
|
}
|
|
}
|
|
function toggle_search() {
|
|
var w = document.getElementById("searchmenu");
|
|
if( w.style.display=="block" ){
|
|
w.style.display = "none";
|
|
} else {
|
|
w.style.display = "block";
|
|
setTimeout(function(){
|
|
document.getElementById("searchbox").focus()
|
|
}, 30);
|
|
}
|
|
}
|
|
function div_off(nm){document.getElementById(nm).style.display="none";}
|
|
window.onbeforeunload = function(e){div_off("submenu");}
|
|
/* Disable the Search feature if we are not operating from CGI, since */
|
|
/* Search is accomplished using CGI and will not work without it. */
|
|
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
|
|
document.getElementById("search_menubutton").style.display = "none";
|
|
}
|
|
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
|
|
function hideorshow(btn,obj){
|
|
var x = document.getElementById(obj);
|
|
var b = document.getElementById(btn);
|
|
if( x.style.display!='none' ){
|
|
x.style.display = 'none';
|
|
b.innerHTML='show';
|
|
}else{
|
|
x.style.display = '';
|
|
b.innerHTML='hide';
|
|
}
|
|
return false;
|
|
}
|
|
</script>
|
|
</div>
|
|
<div class=fancy>
|
|
<div class=nosearch>
|
|
<div class="fancy_title">
|
|
Why SQLite Does Not Use Git
|
|
</div>
|
|
<div class="fancy_toc">
|
|
<a onclick="toggle_toc()">
|
|
<span class="fancy_toc_mark" id="toc_mk">►</span>
|
|
Table Of Contents
|
|
</a>
|
|
<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
|
|
<div class="fancy-toc2"><a href="#edits">1.1. Edits</a></div>
|
|
<div class="fancy-toc1"><a href="#a_few_reasons_why_sqlite_does_not_use_git">2. A Few Reasons Why SQLite Does Not Use Git</a></div>
|
|
<div class="fancy-toc2"><a href="#git_does_not_provide_good_situational_awareness">2.1. Git does not provide good situational awareness</a></div>
|
|
<div class="fancy-toc2"><a href="#git_makes_it_difficult_to_find_successors_descendents_of_a_check_in">2.2. Git makes it difficult to find successors (descendents)
|
|
of a check-in</a></div>
|
|
<div class="fancy-toc2"><a href="#the_mental_model_for_git_is_needlessly_complex">2.3. The mental model for Git is needlessly complex</a></div>
|
|
<div class="fancy-toc2"><a href="#git_does_not_track_historical_branch_names">2.4. Git does not track historical branch names</a></div>
|
|
<div class="fancy-toc2"><a href="#git_requires_more_administrative_support">2.5. Git requires more administrative support</a></div>
|
|
<div class="fancy-toc2"><a href="#git_provides_a_poor_user_experience">2.6. Git provides a poor user experience</a></div>
|
|
<div class="fancy-toc1"><a href="#a_git_user_s_guide_to_accessing_sqlite_source_code">3. A Git-User's Guide To Accessing SQLite Source Code</a></div>
|
|
<div class="fancy-toc2"><a href="#the_official_github_mirror">3.1. The Official GitHub Mirror</a></div>
|
|
<div class="fancy-toc2"><a href="#web_access">3.2. Web Access</a></div>
|
|
<div class="fancy-toc2"><a href="#fossil_access">3.3. Fossil Access</a></div>
|
|
<div class="fancy-toc2"><a href="#verifying_source_code_integrity">3.4. Verifying Source Code Integrity</a></div>
|
|
<div class="fancy-toc1"><a href="#see_also">4. See Also</a></div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
function toggle_toc(){
|
|
var sub = document.getElementById("toc_sub")
|
|
var mk = document.getElementById("toc_mk")
|
|
if( sub.style.display!="block" ){
|
|
sub.style.display = "block";
|
|
mk.innerHTML = "▼";
|
|
} else {
|
|
sub.style.display = "none";
|
|
mk.innerHTML = "►";
|
|
}
|
|
}
|
|
</script>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<h1 id="introduction"><span>1. </span>Introduction</h1>
|
|
|
|
<p>
|
|
SQLite does not use the
|
|
<a href="https://git-scm.org">Git</a> version control system.
|
|
SQLite uses
|
|
<a href="https://fossil-scm.org/">Fossil</a> instead, which is a
|
|
version control system that was specifically designed
|
|
and written to support SQLite.
|
|
|
|
</p><p>
|
|
People often wonder why SQLite does not use the
|
|
<a href="https://git-scm.org">Git</a> version control system like everybody
|
|
else.
|
|
This article attempts to answer that question. Also,
|
|
in <a href="#getthecode">section 3</a>,
|
|
this article provides hints to Git users
|
|
about how they can easily access the SQLite source code.
|
|
|
|
</p><p>
|
|
This article is <u>not</u> a comparison between Fossil
|
|
and Git. See
|
|
<a href="https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki">https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki</a>
|
|
for one comparison of the two systems. There are others as
|
|
well.
|
|
|
|
</p><p>
|
|
This article is <u>not</u> advocating that you switch your projects
|
|
away from Git. You can use whatever version control system you want.
|
|
If you are perfectly happy with Git, then by all means keep using
|
|
Git. But, if you are wondering if there isn't something better,
|
|
then maybe try to understand the perspectives presented below.
|
|
Use the insights thus obtained to find or write a different and
|
|
better version control system, or to just make
|
|
improvements to Git itself.
|
|
|
|
</p><h2 id="edits"><span>1.1. </span>Edits</h2>
|
|
|
|
<p>
|
|
This article has been revised multiple times in an attempt
|
|
to improve clarity, address concerns and misgivings,
|
|
and to fix errors identified on
|
|
<a href="https://news.ycombinator.com/item?id=16806114">Hacker News</a>,
|
|
<a href="https://www.reddit.com/r/programming/comments/8c2niw/why_sqlite_does_not_use_git/">Reddit</a>
|
|
and
|
|
<a href="https://lobste.rs/s/slcntl/why_sqlite_does_not_use_git">Lobsters</a>.
|
|
The complete edit history can be seen at
|
|
<a href="https://sqlite.org/docsrc/finfo/pages/whynotgit.in">https://sqlite.org/docsrc/finfo/pages/whynotgit.in</a>.
|
|
(Usage hint: Click on any two nodes of the graph for a diff.)
|
|
|
|
</p><h1 id="a_few_reasons_why_sqlite_does_not_use_git"><span>2. </span>A Few Reasons Why SQLite Does Not Use Git</h1>
|
|
|
|
<h2 id="git_does_not_provide_good_situational_awareness"><span>2.1. </span>Git does not provide good situational awareness</h2>
|
|
|
|
<p>
|
|
When I want to see what has been happening on SQLite (or any of
|
|
about a dozen other projects that I work on) I visit the
|
|
<a href="https://sqlite.org/src/timeline">timeline</a> and in a single
|
|
screen I can see a quick summary of all the latest changes,
|
|
on all branches.
|
|
In a few clicks, I can drill down to see as much detail as I
|
|
want. I can even do this from a phone.
|
|
|
|
</p><p>
|
|
GitHub and GitLab offer nothing comparable. The closest I have
|
|
found is the <a href="https://github.com/sqlite/sqlite/network">network</a>,
|
|
which is slow to render (unless it is already cached), does not
|
|
offer nearly as much details, and scarcely works on mobile.
|
|
The <a href="https://github.com/sqlite/sqlite/commits/master">commits</a> view
|
|
of GitHub provides more detail, renders quickly,
|
|
and works on mobile, but only shows a single branch at a time,
|
|
so I cannot easily know if I've seen all of the recent changes.
|
|
And even if GitHub/GitLab did offer better interfaces, both are
|
|
third-party services. They are not a core part of Git. Hence,
|
|
using them introduces yet another dependency into the project.
|
|
|
|
</p><p>
|
|
I am told that Git users commonly install third-party graphical
|
|
viewers for Git, many of which do a better job of showing recent
|
|
activity on the project. That is great, but these are still
|
|
more third-party applications that must be installed and
|
|
managed separately. Many are platform-specific. (One of the
|
|
better ones, <a href="https://gitup.co/">GitUp</a>, only works on Mac, for
|
|
example.) All require that you first sync your local repository
|
|
then bring up their graphical interface on your desktop. And
|
|
even with all that, I still cannot see what I typically want to
|
|
see without multiple clicks. Checking on project status from
|
|
a phone while away from the office is not an option.
|
|
|
|
</p><h2 id="git_makes_it_difficult_to_find_successors_descendents_of_a_check_in"><span>2.2. </span>Git makes it difficult to find successors (descendents)
|
|
of a check-in</h2>
|
|
|
|
<p>
|
|
Git allows you to go backwards in time easily. Given the latest
|
|
check-in on a branch, Git lets you see all the ancestors of that
|
|
check-in. But Git makes it difficult to move in the other
|
|
direction. Given some historical check-in, it is quite challenging
|
|
in Git to find out what came next. It can be done, but it is sufficiently
|
|
difficult that people rarely do it. Common interfaces for Git,
|
|
such as GitHub, do not support the ability.
|
|
|
|
</p><p>It is not impossible to find the descendents of a check-in
|
|
in Git. It is merely difficult. For example,
|
|
there is a
|
|
<a href="https://stackoverflow.com/questions/27960605/find-all-the-direct-descendants-of-a-given-commit#27962018">stackoverflow page</a>
|
|
showing the command sequence for finding the descendents of a check-in
|
|
in unix:
|
|
|
|
</p><div class="codeblock"><pre>git rev-list --all --parents | grep ".\{40\}.*<parent_sha1>.*" | awk '{print $1}'
|
|
</parent_sha1>
|
|
</pre></div>
|
|
|
|
<p>
|
|
This command sequence is a lot to memorize and type. (One would want
|
|
to create a bash alias or short shell script if it were used frequently.)
|
|
Furthermore, it is not quite the same thing. The command above gives
|
|
one a list of descendents without showing the branching structure, which
|
|
is important for understanding what happened.
|
|
In contrast, Fossil offers displays such as
|
|
<a href="https://sqlite.org/src/timeline?d=8a439a6dda390d74&n=15">https://sqlite.org/src/timeline?d=8a439a6dda390d74&n=15</a>, which
|
|
is a tremendous help in analyzing the aftermath of historical changes.
|
|
|
|
</p><p>
|
|
And it is not really about just finding the descendents of a check-in
|
|
from time to time. The fact that descendents are readily available in
|
|
Fossil means that the information pervades the web pages provided by
|
|
Fossil. One example: Every Fossil check-in information page
|
|
(<a href="https://www.sqlite.org/src/info/ec7addc87f97bcff">example</a>) shows
|
|
a small "Context" graph of the immediate predecessor and successors
|
|
to that check-in. This helps the user maintain better situational
|
|
awareness, and it provides useful capabilities, such as the ability
|
|
click forward to the next check-in in sequence. Another example:
|
|
Fossil easily shows the context around a specific check-in
|
|
(<a href="https://www.sqlite.org/src/timeline?c=2018-03-16&n=10">example</a>)
|
|
which again helps to promote situational awareness and a deeper
|
|
understanding of what is happening in the code.
|
|
|
|
</p><p>
|
|
All of the above is possible with Git, given the right extensions
|
|
and tools and using the right commands. But it is not easy to do,
|
|
and so it rarely gets done. Consequently, developers have less awareness
|
|
of what is happening in the code.
|
|
|
|
</p><h2 id="the_mental_model_for_git_is_needlessly_complex"><span>2.3. </span>The mental model for Git is needlessly complex</h2>
|
|
|
|
<p>
|
|
The complexity of Git
|
|
distracts attention from the software under development. A user of Git
|
|
needs to keep all of the following in mind:
|
|
</p><ol type="'a'">
|
|
<li> The working directory
|
|
</li><li> The "index" or staging area
|
|
</li><li> The local head
|
|
</li><li> The local copy of the remote head
|
|
</li><li> The actual remote head
|
|
</li></ol>
|
|
<p>
|
|
Git commands (and/or options on commands) for moving and
|
|
comparing content between all of these locations.
|
|
|
|
</p><p>In contrast,
|
|
Fossil users only need to think about their working directory and
|
|
the check-in they are working on. That is 60% less distraction.
|
|
Every developer has a finite number of brain-cycles. Fossil
|
|
requires fewer brain-cycles to operate, thus freeing up
|
|
intellectual resources to focus on the software under development.
|
|
|
|
</p><p>One user of both Git and Fossil
|
|
<a href="https://news.ycombinator.com/item?id=16806955">writes in HN</a>:
|
|
|
|
</p><blockquote><i>
|
|
Fossil gives me peace of mind that I have everything ... synced to
|
|
the server with a single command....
|
|
I never get this peace of mind with git.
|
|
</i></blockquote>
|
|
|
|
<h2 id="git_does_not_track_historical_branch_names"><span>2.4. </span>Git does not track historical branch names</h2>
|
|
|
|
<p>
|
|
Git keeps the complete DAG of the check-in sequence. But branch
|
|
tags are local information that is not synced and not retained
|
|
once a branch closes.
|
|
This makes review of historical
|
|
branches tedious.
|
|
|
|
</p><p>
|
|
As an example, suppose someone (perhaps a customer) asks you:
|
|
"What ever became of that 'prefer-coroutine-sort-subquery' branch
|
|
from two years ago?"
|
|
You might try to answer the query by consulting the history in
|
|
your version control system, thusly:
|
|
|
|
</p><ul>
|
|
<li><b>GitHub:</b> <a href="https://github.com/sqlite/sqlite/commits/prefer-coroutine-sort-subquery">https://github.com/sqlite/sqlite/commits/prefer-coroutine-sort-subquery</a>
|
|
</li><li><b>Fossil:</b> <a href="https://sqlite.org/src/timeline?r=prefer-coroutine-sort-subquery">https://sqlite.org/src/timeline?r=prefer-coroutine-sort-subquery</a>
|
|
</li></ul>
|
|
|
|
<p>
|
|
The Fossil view clearly shows that the branch was eventually merged back into
|
|
trunk. It shows where the branch started, and it shows two occasions where changes
|
|
on trunk were merged into the branch. GitHub shows none of this. In fact, the
|
|
GitHub display is mostly useless in trying to figure out what happened.
|
|
|
|
</p><p>
|
|
Many readers have recommended various third-party GUIs for Git that
|
|
might do a better job of showing historical development activity. Maybe
|
|
some of them do work better than native Git and/or GitHub, though they
|
|
will all be hampered by the fact that Git does not preserve historical
|
|
branch names across syncs. And even if those other tools are better,
|
|
the fact that it is necessary to go to a third-party tool to get the information
|
|
desired does not speak well of the core system.
|
|
|
|
</p><h2 id="git_requires_more_administrative_support"><span>2.5. </span>Git requires more administrative support</h2>
|
|
|
|
<p>
|
|
Git is complex software.
|
|
One needs an installer of some kind to put Git on a developer
|
|
workstation, or to upgrade to a newer version of Git.
|
|
Setting up a Git server is non-trivial, and so most users
|
|
have to use a third-party service such as GitHub or GitLab,
|
|
and thus introduce additional (unnecessary) dependencies
|
|
into the project.
|
|
|
|
</p><p>
|
|
In contrast, Fossil is a single standalone binary which is
|
|
installed by putting it on $PATH. That one binary contains all
|
|
the functionality of core Git and also GitHub and/or GitLab. It
|
|
manages a community server with wiki, bug tracking, and forums,
|
|
provides packaged downloads for consumers, login managements,
|
|
and so forth, with no extra software required.
|
|
|
|
</p><p>
|
|
Less administration means that programmers spend more time working
|
|
on the software (SQLite in this case) and less time fussing with
|
|
the version control system.
|
|
|
|
</p><h2 id="git_provides_a_poor_user_experience"><span>2.6. </span>Git provides a poor user experience</h2>
|
|
|
|
<p>The following <a href="https://xkcd.com/1597/">https://xkcd.com/1597/</a> cartoon is an
|
|
exaggeration, yet hits close to home:
|
|
|
|
</p><p>
|
|
<img src="https://www.fossil-scm.org/fossil/doc/trunk/www/xkcd-git.gif">
|
|
|
|
</p><p>Let's be real. Few people seriously dispute that Git provides
|
|
a suboptimal user experience. A lot of
|
|
the underlying implementation shows through into the user
|
|
interface. The interface is so bad that there is even a
|
|
parody site that generates
|
|
<a href="https://git-man-page-generator.lokaltog.net/">fake git man pages</a>.
|
|
|
|
</p><p>Designing software is hard. It takes a lot of focus.
|
|
A good version control system should provide the developer with
|
|
assistance, not frustration. Git has gotten better in this
|
|
regard over the past decade, but it still has a long way to go.
|
|
|
|
<a name="getthecode"></a>
|
|
</p><h1 id="a_git_user_s_guide_to_accessing_sqlite_source_code"><span>3. </span>A Git-User's Guide To Accessing SQLite Source Code</h1>
|
|
|
|
<p>
|
|
If you are a devoted Git user, you can still easily access SQLite.
|
|
This section gives some hints on how to do so.
|
|
|
|
</p><h2 id="the_official_github_mirror"><span>3.1. </span>The Official GitHub Mirror</h2>
|
|
|
|
<p>
|
|
As of 2019-03-20, there is now an
|
|
<a href="https://github.com/sqlite/sqlite">official Git mirror</a> of the
|
|
SQLite sources on GitHub.
|
|
|
|
</p><p>The mirror is an incremental export of the
|
|
<a href="https://sqlite.org/src/timeline">canonical Fossil repository</a> for
|
|
SQLite. A cron-job updates the GitHub repository once an hour.
|
|
This is a one-way, read-only code mirror. No pull requests or
|
|
changes are accepted via GitHub. The GitHub repository merely copies
|
|
the content from the Fossil repository. All changes are input via
|
|
Fossil.
|
|
|
|
</p><p>
|
|
The hashes that identify check-ins and files on the Git mirror are
|
|
different from the hashes in Fossil. There are many reasons for
|
|
this, chief among them that Fossil uses a SHA3-256 hash whereas
|
|
Git uses a SHA1 hash. During export, the original Fossil hash for
|
|
each check-in is added as a footer to check-in comments. To avoid
|
|
confusion, always use the original Fossil hash, not the Git hash,
|
|
when referring to SQLite check-ins.
|
|
|
|
</p><h2 id="web_access"><span>3.2. </span>Web Access</h2>
|
|
|
|
<p>
|
|
The <a href="https://sqlite.org/src/timeline">SQLite Fossil Repository</a> contains links
|
|
for downloading a Tarball, ZIP Archive, or <a href="sqlar.html">SQLite Archive</a> for any
|
|
historical version of SQLite. The URLs for these downloads are
|
|
simple and can be incorporated easily into automated tools. The format is:
|
|
|
|
</p><blockquote>
|
|
<tt>https://sqlite.org/src/tarball/</tt><i>VERSION</i><tt>/sqlite.tar.gz</tt>
|
|
</blockquote>
|
|
|
|
<p>
|
|
Simply replace <i>VERSION</i> with some description of the version to be
|
|
downloaded. The <i>VERSION</i> can be a prefix of the cryptographic hash
|
|
name of a specific check-in, or the name of a branch (in which case the
|
|
most recent version of the branch is fetched) or a tag for a specific
|
|
check-in like "version-3.23.1":
|
|
|
|
</p><blockquote>
|
|
<tt>https://sqlite.org/src/tarball/version-3.23.1/sqlite.tar.gz</tt>
|
|
</blockquote>
|
|
|
|
|
|
<p>To get the latest release, use "release"
|
|
for <i>VERSION</i>, like this:
|
|
|
|
</p><blockquote>
|
|
<tt>https://sqlite.org/src/tarball/release/sqlite.tar.gz</tt>
|
|
</blockquote>
|
|
|
|
<p>
|
|
To get the latest trunk check-in, us "trunk" for <i>VERSION</i>:
|
|
|
|
</p><blockquote>
|
|
<tt>https://sqlite.org/src/tarball/trunk/sqlite.tar.gz</tt>
|
|
</blockquote>
|
|
|
|
<p>
|
|
And so forth.
|
|
For ZIP archives and SQLite Archives, simply change the "/tarball/" element
|
|
into either "/zip/" or "/sqlar/", and maybe also change the name of the
|
|
download file to have a ".zip" or ".sqlar" suffix.
|
|
|
|
</p><h2 id="fossil_access"><span>3.3. </span>Fossil Access</h2>
|
|
|
|
<p>
|
|
Fossil is easy to install and use. Here are the steps for unix.
|
|
(Windows is similar.)
|
|
|
|
</p><ol>
|
|
<li>
|
|
Download the self-contained Fossil executable from
|
|
<a href="https://fossil-scm.org/fossil/uv/download.html">https://fossil-scm.org/fossil/uv/download.html</a> and put the executable
|
|
somewhere on your $PATH.
|
|
</li><li><tt>mkdir ~/fossils</tt>
|
|
</li><li><tt>fossil clone https://sqlite.org/src ~/fossils/sqlite.fossil</tt>
|
|
</li><li><tt>mkdir ~/sqlite; cd ~/sqlite</tt>
|
|
</li><li><tt>fossil open ~/fossils/sqlite.fossil</tt>
|
|
</li></ol>
|
|
|
|
<p>
|
|
At this point you are ready to type "<tt>./configure; make</tt>"
|
|
(or on Windows with MSVC, "<tt>nmake /f Makefile.msc</tt>").
|
|
|
|
</p><p>
|
|
To change your checkout to a different version of Fossil use
|
|
the "update" command:
|
|
|
|
</p><blockquote>
|
|
<tt>fossil update </tt><i>VERSION</i>
|
|
</blockquote>
|
|
|
|
<p>
|
|
Use "trunk" for <i>VERSION</i> to get the latest trunk version of SQLite.
|
|
Or use a prefix of a cryptographic hash name, or the name of some branch
|
|
or tag. See
|
|
<a href="https://fossil-scm.org/fossil/doc/trunk/www/checkin_names.wiki">https://fossil-scm.org/fossil/doc/trunk/www/checkin_names.wiki</a> for more
|
|
suggestions on what names can be used for <i>VERSION</i>.
|
|
|
|
</p><p>
|
|
Use the "<tt>fossil ui</tt>" command from within the ~/sqlite checkout to
|
|
bring up a local copy of the website.
|
|
|
|
</p><p>
|
|
Additional documentation on Fossil can be found at
|
|
<a href="https://fossil-scm.org/fossil/doc/trunk/www/permutedindex.html">https://fossil-scm.org/fossil/doc/trunk/www/permutedindex.html</a>
|
|
|
|
</p><p>
|
|
Do not be afraid to explore and experiment.
|
|
Without a log-in you won't be able to
|
|
push back any changes you make, so you cannot damage the project.
|
|
|
|
</p><h2 id="verifying_source_code_integrity"><span>3.4. </span>Verifying Source Code Integrity</h2>
|
|
|
|
<p>
|
|
If you need to verify that the SQLite source code that you have is
|
|
authentic and has not been modified in any way (perhaps by an adversary)
|
|
that can be done using a few simple command-line tools. At the root
|
|
of the SQLite source tree is a file named "manifest". The manifest
|
|
file contains the name of every other file in the source tree together
|
|
with either a SHA1 or SHA3-256 hash for that file. (SHA1 is used for
|
|
older files and SHA3-256 for newer files.) You can write a
|
|
script to extract these hashes and verify them against the source code
|
|
files. The hash name for the check-in is just the SHA3-256 hash of the
|
|
"manifest" file itself.
|
|
|
|
</p><h1 id="see_also"><span>4. </span>See Also</h1>
|
|
|
|
<p>Other pages that talk about Fossil and Git include:
|
|
</p><ul>
|
|
<li><p><a href="https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki">Fossil vs. Git</a>
|
|
</p></li><li><p><a href="https://www.fossil-scm.org/fossil/doc/trunk/www/quotes.wiki">What others say about Fossil and Git</a>
|
|
</p></li></ul>
|
|
|