blob: 944997d595ecd152a58095708730098b1d946bdd [file] [log] [blame]
******************************************************************************
COMPARISON WITH OTHER VCS
FOR
ISSUE #516: OBLITERATE
******************************************************************************
TABLE OF CONTENTS
1. INTRODUCTION
2. COMPARISON MATRIX
3. PERFORCE
4. CVS
5. CLEARCASE
6. MERCURIAL
7. GIT
1. INTRODUCTION
This document describes how obliteration works in some other Version Control
Systems.
2. COMPARISON MATRIX
This table indicates whether and how three different goals can be
accomplished in Subversion (prior to development of the Obliterate feature)
and other version control systems.
+-------------+-------------------+-------------------+-------------------+
| | Quick hiding | Space recovery | Latest only |
+-------------+-------------------+-------------------+-------------------+
| | | | |
| Subversion | Apache authz? | dump/filter/load | NO |
| (1.6) | Hook scripts? | | |
| | | | |
| Perforce | p4 obliterate | p4 obliterate | YES |
| | p4 protect | | |
| | | | |
| CVS | Admin manual task | Admin manual task | NO ? |
| | | | |
| ClearCase | rmversion/rmelem | rmversion/rmelem | ? |
| | | | |
| Mercurial | ? | ? | ? |
| | | | |
| GIT | ? | ? | ? |
| | | | |
+-------------+-------------------+-------------------+-------------------+
3. PERFORCE
Perforce has a client-side command for obliterating file-revs from the
repository.
Invocation: Client side.
p4 obliterate [-y] file[rev-range] ...
Authz: Restricted by the "admin" priviledge which, like other privilege
levels in Perforce, can be granted per user on arbitrary paths in the
repository.
Repository transformation: The file becomes nonexistent at the specified
revision. At all other revisions it is unchanged. If the head revision of
that file was obliterated, the head file-revision number of that file will
go back to the highest remaining revision, and the next revision to be
committed will have a file-revision number that has been used before. The
repository-scope "changelist" numbers are not affected.
Client (WC) issues: If a file is obliterated at all revisions, this file
becomes unversioned in WCs and/or is removed from WCs by a "sync" command
(that's not clear). If a file is obliterated at only specified revisions,
according to the manual: "Syncing to an obliterated revision will remove the
file from your client workspace, syncing to the head revision will [...]
provide you with the most recent non-obliterated revision of the file."
Backups, Mirrors: ### ?
Relevant differences between Subversion and Perforce: In Perforce, only
files are versioned, and files are tracked primarily by their path (with
some support for renaming, moving and replacing). Perforce maintains both a
file-revision number and a repository-scope "changeset" number (which is
similar to Subversion's revision number). Perforce does not maintain
client-side state for the WCs so the new state is immediately seen when any
Perforce operation is attempted.
Reference manual:
<http://www.perforce.com/perforce/doc.current/manuals/cmdref/obliterate.html>
4. CVS
CVS has no special support for obliterating, but it is established
practice for administrators to obliterate the whole history of a file by
deleting the corresponding archive file from the repository.
CVS has little repository-side metadata outside the per-file RCS archive
files, so deleting one of these achieves total obliteration of the
corresponding file through all its revisions.
Invocation: Server side, native operating system commands.
Authz: Implicit (requires server file-system privileges).
Repository transformation: The file's existence and its history is deleted,
including its change logs.
Client (WC) issues: ###
Backups, Mirrors: ### ?
5. CLEARCASE
6. MERCURIAL
Mercurial has no Obliterate command. This email describes how one might
achieve obliteration:
<http://www.selenic.com/pipermail/mercurial/2008-March/017859.html>.
7. GIT
Git has a "git-filter-branch" command which can be used to achieve
obliteration. See the manual page
<http://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html>.