From: Zack Brown <zbrown@tumblerings.org>
To: Daniel Phillips <phillips@arcor.de>
Cc: linux-kernel@vger.kernel.org
Subject: Re: BitBucket: GPL-ed KitBeeper clone
Date: Tue, 11 Mar 2003 10:40:43 -0800 [thread overview]
Message-ID: <20030311184043.GA24925@renegade> (raw)
In-Reply-To: <20030309225857.0FAC7101207@mx12.arcor-online.net>
On Tue, Mar 11, 2003 at 12:03:18AM +0100, Daniel Phillips wrote:
> On Sun 09 Mar 03 03:45, Zack Brown wrote:
> > OK, so here is my distillation of Larry's post.
...
> > I'd be willing to maintain this as the beginning of a feature list and
> > post it regularly to lkml if enough people feel it would be useful and not
> > annoying. The goal would be to identify the features/problems that would
> > need to be handled by a kernel-ready version control system.
> >
> > Be well,
> > Zack
>
> Hi Zack,
>
> You might want to have a look here, there's lots of good stuff:
>
> http://arx.fifthvision.net/bin/view/Arx/LinuxKernel
> (Kernel Hackers SCM wish list)
Hi,
I remember that discussion. It was pretty interesting, but some
conflicting ideas about what should be done; and not much organization
to it all.
I've taken a lot of stuff from that wish list, combined it with what I gathered
from Larry's earlier post, and from Petr Baudis' recent post, and elsewhere,
and organized it into something that might be interesting. If anyone would
like to host this document on the web, please let me know.
--------------------------------- cut here ---------------------------------
Linux Kernel Requirements For A Version Control System
Document version 0.0.1
This document describes the features required for a version control system
that would be acceptable to Linux kernel developers. A second section below
lists features that would also be good, but not required for adoption by the
kernel team.
Please help out by clarifying features; identifying which features are
really required and which would just be nice; and by listing corner cases
and other implementation issues.
* * * Basic summary * * *
A distributed, replicated, version controlled user level file system with no
limits on any of the file system events which may happen in parallel. All
changes must be put correctly back together, no matter how much parallelism
there has been.
* * * Requirements For The Kernel * * *
Distributed Branches
1. Introduction
The idea of distributed branches is to allow developers to pull an entire,
full-featured repository onto their home system from the 'main' repository,
allow them to work off-line or with other groups of developers without
sacrificing the features of a full repository, then merge their work back to
the main repository or to other repositories.
A 'main' repository in this case is simply a repository used by the project
leader of a given project. It has no special features or privileges missing
from other branches. It is only considered the 'main' repository for social
reasons, not technical ones. Therefore, branches that have been cloned from
the main repository should not have to 'register' with the repository they
cloned from. i.e. one repository should be able to interact fully with
another, without either of them having prior knowledge of the other.
2. Behavior
Creating one repository from another should produce a full clone; not just
the current state of the parent repository, but all data from the parent
should be included in the child.
When cloning a repository, committing changes back to the parent, or sharing
changes with any other repositories, no assumptions should be made about the
location of the repositories on the network. Repositories may be on the same
machine, or on entirely different machines anywhere in the world.
Changesets
1. Introduction
A changeset is a group of files in a repository, that have been tagged by
the developer, as being logical parts of a patch dealing with a single
feature or fix. A developer working on multiple aspects of a repository, may
create one changeset for each aspect, in which each changeset consists of
the files relevant to that aspect.
In the context of sharing changesets between repositories, a changeset
consists of a diff between the set of files in the local and remote
repositories.
2. Behavior
2.1 Tagging
It must be trivial for a developer to tag a file as part of a given
changeset.
It must be possible to reorganize changesets, so that a given changeset may
be split up into more manageable pieces.
2.2 Versioning
Changesets are given their own local version number, incremented with each
checkin.
3. Problems For Clarification
If a file is tagged as being part of two different changesets, then changes
to that file should be associated with which changeset???
Checkins
1. Introduction
Checkins consist of making local modifications to a given repository. This
is distinct from merging changes from one repository into another. A
developer making local changes to their own repository is doing checkins. A
developer sharing their changes with a separate repository is doing merging.
2. Behavior
Files that are not part of a changeset are treated individually. On checkin,
the developer may include a comment for each file. This is distinct from
version control systems that take a single comment for the whole checkin.
It must be possible to checkin a single changeset to a local repository, and
have that changeset be treated as an individual unit, just as plain files
are: on checkin, the developer includes a single comment for the entire
changeset.
Merging
1. Introduction
Merging consists of sending and receiving changes between two or more
repositories.
2. Behavior
2.1 Preserving Local Work
It must be possible to update a local repository to match changes that have
been made to a remote repository, while at the same time preserve changes
that have been made to the local repository. If conflicts arise because some
of the same files have changed on both the local and remote repositories,
conflict resolution tools should be automatically invoked for the local
developer (see below).
If a checkin is interrupted for some reason, it should be easy to clean up
the tree, bringing it back to a consistant, useful state.
It should be possible to mark a file as private to a local repository, so
that a merge will never try to commit that file's changes to a remote
repository.
2.2 Preserving History
Checkin tags and version numbers are local to a given repository. Because
duplicates may exist across repositories, these historical details must be
remapped during checkin, to values that are unique within the remote
repository, but that can still be identified with their originals.
A merge between two repositories does not consist only of merging the
current state of a set of changesets, but their entire history, including
all their versions and the files that comprise them.
Even if no history is available for a given patch, it should be easy to
checkin and merge that patch.
The implementation must not depend on time being accurately reported by any
of the repositories.
3. Graph Structure
To illustrate some of the above behaviors, see the following DAG (Directed
Acyclic Graph). This graph will look different when viewed from each
repository (diagrams show the ChangeSet numbers). From the imaginary Linus'
branch, it looks like:
linus 1.1 -> 1.2 -> 1.3 -----> 1.4 -> 1.5 -----> 1.6 -----> 1.7
\ / \ /
alan \-> 1.2.1.1 --/---\-> 1.2.1.2 -> 1.2.1.3 --/
But from the Alan' branch, it looks like:
linus 1.1 -> 1.2 -> 1.2.1.1 -> 1.2.1.2 -> 1.2.1.3 -> 1.2.1.4 -> 1.2.1.5
\ / \ /
alan \-> 1.3 ------/---\-----> 1.4 -----> 1.5 ------/
A virtual branch, used to track changesets, not per-file revisions, is
created in the parent repository during merge. At this time the merged
changesets receive new numbers appropriate for that branch. But since the
branch is only virtual, there is still only one line of development in the
repository. To see the changesets in the order they were applied, they must
be sorted not by revision number buy by merge time. Thus, with respect to
the above diagrams, the order in which the patches were applied, from Linus'
perspective, is:
1.1 1.2 1.3 1.2.1.1 1.4 1.5 1.6 1.2.1.2 1.2.1.3 1.7
Distributed Rename Handling
1. Introduction
This consists of allowing developers to rename files and directories, and
have all repository operations properly recognize and handle this.
2. Behavior
2.1 Local
Renaming files and directories locally should preserve all historical
information including changeset tags.
2.2 Distributed
In the general case, a single local repository attempts to merge
name-changes with a remote repository. In this case, the remote repository
receives the name change, along with all history including changeset tags.
2.2.1 Conflicts
An arbitrary number of repositories cloned from either a single remote
repository or from each other may attempt to change the name of a single
file to arbitrary other names and then merge that change back to a single
remote repository or to each other.
An arbitrary number of repositories cloned from either a single remote
repository or from each other may rename file A to something else, and then
other files to the name formerly used by File A, or create a new file with
the name formerly used by file A; and then merge those changes to the single
remote repository or to each other.
An arbitrary number of repositories cloned from either a single remote
repository or from each other may attempt to create a file with the same
name and merge that change back to the remote repository or to each other.
Graphical 2- And 3-Way Merging Tool
1. Introduction
Merge tools are tools used to resolve conflicts when merging files. See
tkdiff ( http://www.accurev.com/free/tkdiff/ )
2. Behavior
The merge tools should identify precisely the areas of conflict, and enable
the user to quickly edit the files to resolve the conflicts and apply the
patch.
Merge tools must be able to handle patches as well as entire files.
A typical usage would be to pull all recent changes to a local tree from a
remote repository; then run the merge tools to resolve any conflicts between
the remote repository and changes that have been made locally; tag local
files to produce a changeset; and generate a diff for sharing.
* * * Not Required For Kernel Development * * *
Changesets
It should be possible to exchange changesets via email.
File Types
The system should support symlinks, device special files, fifos, etc. (i.e.
inode metadata)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
This document is copyright Zack Brown and released under the terms of the
GNU General Public License, version 2.0.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
--------------------------------- cut here ---------------------------------
>
> Regards,
>
> Daniel
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Zack Brown
next prev parent reply other threads:[~2003-03-11 18:30 UTC|newest]
Thread overview: 199+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-03-02 0:11 BitBucket: GPL-ed KitBeeper clone Adam J. Richter
2003-03-02 0:20 ` Larry McVoy
2003-03-02 0:20 ` David Lang
2003-03-02 0:49 ` Arador
2003-03-02 1:03 ` Jeff Garzik
2003-03-02 2:15 ` Alan Cox
2003-03-02 1:19 ` Jeff Garzik
2003-03-02 1:40 ` BitBucket: GPL-ed *notrademarkhere* clone Andrea Arcangeli
2003-03-02 1:45 ` Jeff Garzik
2003-03-02 2:09 ` Andrea Arcangeli
2003-03-02 17:28 ` Jeff Garzik
2003-03-02 18:16 ` Andrea Arcangeli
2003-03-02 20:12 ` Jeff Garzik
2003-03-02 21:49 ` Geert Uytterhoeven
2003-03-03 18:37 ` Larry McVoy
2003-03-03 18:46 ` Larry McVoy
2003-03-03 22:57 ` Andrea Arcangeli
2003-03-03 23:14 ` Pavel Machek
2003-03-03 23:56 ` David Lang
2003-03-04 0:02 ` Jeff Garzik
2003-03-04 0:05 ` Larry McVoy
2003-03-04 0:15 ` Andrea Arcangeli
2003-03-04 0:30 ` Jeff Garzik
2003-03-04 2:20 ` Martin J. Bligh
2003-03-04 5:29 ` Linus Torvalds
2003-03-04 5:56 ` Dimitrie O. Paun
2003-03-04 14:51 ` Jeff Garzik
2003-03-02 3:29 ` H. Peter Anvin
2003-03-02 17:12 ` Jeff Garzik
2003-03-02 18:39 ` H. Peter Anvin
2003-03-02 20:01 ` Jeff Garzik
2003-03-03 0:47 ` nickn
2003-03-03 0:55 ` David Lang
2003-03-03 2:31 ` Jeff Garzik
2003-03-03 2:32 ` Jeff Garzik
2003-03-04 1:07 ` Horst von Brand
2003-03-04 1:10 ` H. Peter Anvin
2003-03-03 21:53 ` Joel Becker
2003-03-04 23:37 ` Olaf Hering
2003-03-06 16:47 ` Pavel Machek
2003-03-06 16:41 ` Pavel Machek
2003-03-07 11:24 ` Tupshin Harper
2003-03-07 11:28 ` Pavel Machek
2003-03-07 21:53 ` H. Peter Anvin
2003-03-08 23:18 ` Daniel Phillips
2003-03-03 0:13 ` Pavel Machek
2003-03-03 0:10 ` BitBucket: GPL-ed KitBeeper clone Pavel Machek
2003-03-04 16:16 ` David Woodhouse
2003-03-04 16:27 ` Pavel Machek
2003-03-02 1:26 ` Olivier Galibert
2003-03-06 16:18 ` Pavel Machek
2003-03-07 12:12 ` Olivier Galibert
2003-03-07 12:32 ` Pavel Machek
2003-03-07 16:54 ` Olivier Galibert
2003-03-07 17:14 ` Geert Uytterhoeven
2003-03-07 19:08 ` Pavel Machek
2003-03-07 19:25 ` Eli Carter
2003-03-07 20:29 ` Pavel Machek
2003-03-07 23:16 ` Linus Torvalds
2003-03-08 22:52 ` Zack Brown
2003-03-09 0:05 ` Larry McVoy
2003-03-09 1:21 ` Davide Libenzi
2003-03-09 2:45 ` Zack Brown
2003-03-09 3:19 ` Roman Zippel
2003-03-09 3:42 ` Linus Torvalds
2003-03-09 4:32 ` Roman Zippel
2003-03-09 13:34 ` Eric W. Biederman
2003-03-09 15:35 ` Roman Zippel
2003-03-09 16:55 ` Martin J. Bligh
2003-03-09 17:20 ` Zack Brown
2003-03-09 17:48 ` Martin J. Bligh
2003-03-09 19:58 ` Larry McVoy
2003-03-09 21:32 ` Zack Brown
2003-03-09 21:54 ` Valdis.Kletnieks
2003-03-09 23:28 ` Larry McVoy
2003-03-13 20:00 ` Pavel Machek
2003-03-09 17:39 ` Linus Torvalds
2003-03-09 17:58 ` Martin J. Bligh
2003-03-09 18:20 ` Larry McVoy
2003-03-09 23:19 ` fs
2003-03-13 0:41 ` Pavel Machek
2003-03-13 21:21 ` Horst von Brand
2003-03-09 20:01 ` Roman Zippel
2003-03-13 0:13 ` Pavel Machek
2003-03-09 14:49 ` Olivier Galibert
2003-03-13 0:05 ` Pavel Machek
2003-03-10 0:02 ` Thoughts about ideal kernel SCM Petr Baudis
2003-03-10 0:32 ` Larry McVoy
2003-03-12 19:29 ` Petr Baudis
2003-03-13 10:36 ` Pavel Machek
2003-03-14 22:56 ` Petr Baudis
2003-03-17 20:59 ` Petr Baudis
2003-03-10 3:41 ` BitBucket: GPL-ed KitBeeper clone Horst von Brand
2003-03-10 13:52 ` Jamie Lokier
2003-03-10 23:03 ` Daniel Phillips
2003-03-11 18:40 ` Zack Brown [this message]
2003-03-11 18:46 ` Martin J. Bligh
2003-03-11 19:30 ` Daniel Phillips
2003-03-11 19:33 ` Martin J. Bligh
2003-03-11 20:08 ` Andrew Morton
2003-03-11 20:29 ` Martin J. Bligh
2003-03-12 6:14 ` Werner Almesberger
2003-03-13 2:48 ` Daniel Phillips
2003-03-13 3:11 ` Werner Almesberger
2003-03-14 12:29 ` Pavel Machek
2003-03-15 20:53 ` Martin J. Bligh
2003-03-15 21:26 ` Daniel Phillips
2003-03-15 21:32 ` Petr Baudis
2003-03-15 23:39 ` Petr Baudis
2003-03-16 0:39 ` Horst von Brand
2003-04-07 21:22 ` Petr Baudis
2003-03-12 3:47 ` Horst von Brand
2003-03-12 4:03 ` Larry McVoy
2003-03-12 4:49 ` [PATCH] ~/kernel/sys.c (2.5.64) (trivial) Jay Patrick Howard
2003-03-12 5:22 ` BitBucket: GPL-ed KitBeeper clone Zack Brown
2003-03-12 5:44 ` Horst von Brand
2003-03-12 13:48 ` Daniel Phillips
2003-03-13 1:03 ` Horst von Brand
2003-03-13 16:53 ` Daniel Phillips
2003-03-15 15:02 ` Horst von Brand
2003-03-15 21:25 ` Daniel Phillips
2003-03-12 6:19 ` Werner Almesberger
2003-03-13 1:31 ` Horst von Brand
2003-03-12 15:32 ` Horst von Brand
2003-03-12 16:13 ` Daniel Phillips
2003-03-12 20:37 ` Horst von Brand
2003-03-12 20:54 ` H. Peter Anvin
2003-03-13 2:00 ` Daniel Phillips
2003-03-15 1:03 ` Horst von Brand
2003-03-12 13:22 ` Daniel Phillips
2003-03-13 0:52 ` Horst von Brand
2003-03-13 17:00 ` Daniel Phillips
2003-03-13 21:48 ` Zack Brown
2003-03-13 22:04 ` Daniel Phillips
2003-03-15 16:21 ` Horst von Brand
2003-03-15 21:25 ` Daniel Phillips
2003-03-15 21:53 ` Robert Anderson
2003-03-15 21:50 ` Randy.Dunlap
2003-03-15 22:16 ` Robert Anderson
2003-03-15 22:18 ` Robert Anderson
2003-03-16 0:18 ` Petr Baudis
2003-03-16 0:53 ` Davide Libenzi
2003-03-16 0:55 ` [arch-users] " Stig Brautaset
2003-03-16 1:44 ` Tom Lord
2003-03-16 2:06 ` Adam Spiers
2003-03-16 3:28 ` David Lang
2003-03-16 5:43 ` Robert Anderson
2003-03-16 11:57 ` (Re: BitBucket: GPL-ed KitBeeper clone) Moving to arch-users Petr Baudis
2003-03-14 11:34 ` BitBucket: GPL-ed KitBeeper clone Pavel Machek
2003-03-12 23:38 ` Pavel Machek
2003-03-09 2:06 ` Horst von Brand
[not found] ` <b4b98v_14m_1@penguin.transmeta.com>
2003-03-12 23:23 ` Pavel Machek
2003-03-13 21:15 ` Horst von Brand
2003-03-08 0:18 ` Olaf Dietsche
2003-03-02 1:37 ` Filip Van Raemdonck
-- strict thread matches above, loose matches on Subject: below --
2003-04-08 17:52 Chuck Ebbert
2003-04-08 18:02 ` Larry McVoy
2003-04-08 23:19 ` Jamie Lokier
2003-04-09 0:47 ` Larry McVoy
2003-04-09 1:34 ` Jamie Lokier
2003-04-09 1:43 ` Robert White
2003-04-09 2:09 ` Mark Mielke
2003-04-09 13:14 ` Mr. James W. Laferriere
2003-04-09 13:35 ` Matti Aarnio
2003-04-08 13:06 Chuck Ebbert
2003-04-07 23:57 Chuck Ebbert
2003-04-08 0:30 ` Larry McVoy
[not found] <1047571030.5373.161.camel@passion.cambridge.redhat.com>
2003-03-15 14:17 ` Horst von Brand
2003-03-15 18:48 ` Larry McVoy
2003-03-15 18:51 ` David Woodhouse
[not found] <20030309001008$2ed5@gated-at.bofh.it>
[not found] ` <20030309001008$4e61@gated-at.bofh.it>
[not found] ` <20030309001008$0732@gated-at.bofh.it>
[not found] ` <20030309001008$747c@gated-at.bofh.it>
[not found] ` <20030309001008$6342@gated-at.bofh.it>
2003-03-15 10:47 ` Kai Henningsen
2003-03-13 16:21 Ed Vance
2003-03-15 14:31 ` Horst von Brand
2003-03-12 19:00 Kaz Kylheku
2003-03-03 17:02 Adam J. Richter
2003-03-02 2:23 Adam J. Richter
2003-03-03 15:26 ` Edward S. Marshall
2003-03-03 23:06 ` Daniel Phillips
2003-02-26 20:02 BitBucket: GPL-ed BitKeeper clone Pavel Machek
2003-03-01 18:05 ` BitBucket: GPL-ed KitBeeper clone Pavel Janík
2003-03-01 18:39 ` Christoph Hellwig
2003-03-01 22:43 ` Pavel Janík
2003-03-02 9:11 ` Christoph Hellwig
2003-03-02 9:30 ` John Bradford
2003-03-02 9:32 ` Christoph Hellwig
2003-03-03 12:39 ` Pavel Machek
2003-03-03 14:12 ` Alan Cox
2003-03-03 13:57 ` John Bradford
2003-03-03 14:22 ` Richard B. Johnson
2003-03-03 15:08 ` John Bradford
2003-03-03 17:50 ` David Lang
2003-03-03 19:37 ` Pavel Machek
2003-03-03 19:49 ` John Bradford
2003-03-03 14:22 ` Charles Cazabon
2003-03-02 9:57 ` Pavel Janík
2003-03-03 8:05 ` Helge Hafting
2003-03-03 8:28 ` Bernd Eckenfels
2003-03-01 20:58 ` Paul Fulghum
2003-03-02 4:52 ` Mike Galbraith
2003-03-03 0:02 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030311184043.GA24925@renegade \
--to=zbrown@tumblerings.org \
--cc=linux-kernel@vger.kernel.org \
--cc=phillips@arcor.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox