Fossil

Artifact [cf395096]
Login

Artifact cf3950966893baf86daa7e1f2452476aeba8a3458e015945217172eeb3c1a4d1:

Wiki page [Fossil-NG] by drh 2017-11-18 20:44:01.
D 2017-11-18T20:44:01.258
L Fossil-NG
N text/x-markdown
P 8b55a3bfa37e1bbd00264b1471392c311f0523dfe2d241ed7c12e3ab5cd6794a
U drh
W 2442
## Overview

This is a discussion format and record of ideas for the
"Fossil - Next Generation" or Fossil-NG.  As this sentence is
being written (2017-11-18) there is no code in place for Fossil-NG.

## Goals

The first goal of Fossil-NG is to enhance and improve the Fossil user
experience based on lessons learned from 11 years using and maintaining
legacy Fossil.  New capabilities include:

  +  **Shallow Clones** - the ability to clone just the recent history
     of a project

  +  **Narrow Clones** - the ability to clone a subset of a project,
     for example to clone only the files in the "src/" directory and
     omit all of the files in the "test/" directory.

  +  **Selective Sync** - the ability to push/pull/sync since branches.

In the 11 years since Fossil was created, Git has become the dominate
version control system.  This is unfortunate, because of the various
version control systems available today, Git is the least user-friendly.
Nevertheless, there is no denying that any new version control system
(VCS) will need to deal effectively with the Git legacy.  For this
reason, one important goal of Fossil-NG is to allow seamless integration
with legacy Git repositories.

The primary and most important purpose of Fossil is to support the
development of the [SQLite](https://sqlite.org/) project.  Legacy
Fossil has succeeded fabulously in that respect.  Any changes implemented
for Fossil-NG must respect that history.  In particular, Fossil-NG
must be able to import the complete SQLite history intact, without
any changes to hash identifiers.

## VCS as File Container

By "file container" we mean a archive or bundling format such as
a tarball or ZIP Archive.  One way to think about a VCS is as an
enhanced file container.  Existing file containers allow one to create
a single snapshot of a project time.  A VCS is the same except that
it allows one to store multiple snapshots.

Fossil-NG should have facilities to help to work as a simple file
container like tar and zip.  One should be able to run commands like:

>
    fossil new new-repo.fossil Makefile README.md src/

That command will create a file container named "new-repo.fossil" that
contains the files "Makefile", "README.md", and all files under src/.
This repository would be compact, and suitable for sending as an email
attachment, just like one would do with a tarball or ZIP archive.
Z fa69ab4d81a050522a4d9ce70e708524