| ****************************************************************************** |
| 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>. |
| |
| |