commit 93069372c63185b1160a379ded434c79a9c83b1f from: Stefan Sperling date: Sun Jun 25 19:34:13 2023 UTC add a comparison page, comparing Got to CVS, SVN, and Git I have seen this being requested multiple times now. Hopefully this page will satisfy people who do not have the time to figure out the high-level differences by studying the manual pages. commit - 41ae98c905c4378d82f873038625b205a82a4557 commit + 93069372c63185b1160a379ded434c79a9c83b1f blob - /dev/null blob + 3c36a4ad8475705d3e49ef80a1948eb4407a857b (mode 644) --- /dev/null +++ comparison.html @@ -0,0 +1,139 @@ + + + + + +Game of Trees (Got): Goals + + + + + + + +

+ +Game of Trees +Comparison to other version control systems +

+
+The user interface of the Got client is heavily influenced +by Git, CVS, and SVN. Some inspiration was taken from Fossil and Mercurial. + +

CVS and SVN users will find a familiar user interface which offers additional +commands for transferring changes between repositories across the network. + +

Git users should be aware that Got treats every +Git repository as if it was bare. +This means Got completely ignores the Git work tree and the Git index. +A separate work tree must be checked out from +a Git repository while working with Got. + +

A unique feature of Got is its multi-process model working behind the scenes, +tailored to interfaces provided by the OpenBSD kernel. +Processes with an inherent attack surface, such as those talking to the network or +parsing the data in repositories, run in a separate address space and with +as little capabilities as possible. +The OpenBSD version of Got provides the strongest protections by using +pledge and +unveil +in combination. +For example, unveil enforces read-only access to repositories while the +Got server is serving fetches. +The Got client main process restricts itself to the repository directory (read-only +or read-write as appropriate), the /tmp directory, and the work tree. +Processes speaking the network protocol have no direct filesystem access at all. +All processes are pledged as tightly as possible to restrict the available system +calls to those required for regular operation. +The -portable version of Got uses Capsicum on FreeBSD and Landlock on Linux to restrict +filesystem access during network access and parsing of repository data, but does not +restrict the main process (yet?). + +

+The table below lists network protocols supported by Got and some other systems. +For now, Got lacks support for Git's HTTP protocols, relying exclusively on +OpenSSH. +Got clients interoperate well with popular Git hosting sites over SSH, +and Got servers can safely offer anonymous SSH access for public distribution. + + + +
Got CVS SVN Git +
SSH, git (client)SSH, pserver SSH, svn, HTTP SSH, git, HTTP +
+ +

+The following table lists applicable software licenses: + + + +
Got CVS SVN Git +
ISC GPLv1 or later Apache 2 GPLv2 only +
+ +

+The table below lists some commonly used commands and their rough equivalents in other systems: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Got CVS SVN Git +
got clone cvsync / reposync svnsync git clone --bare +
gotadmin initcvs init svnadmin create git init +
got checkout cvs checkout svn checkout git clone / git worktree +
got update cvs update svn update git checkout HEAD +
got update -c <commit> cvs update -r svn update -r git checkout <commit> +
got update -b <branch> cvs update -r svn switch git checkout <branch> / git switch +
got branch cvs tag svn copy git checkout -b <branch> +
got status cvs update -n svn status git status -s +
got diff cvs diff -uNP svn diff git diff --patience +
got patch /usr/bin/patch svn patch git am +
got add <unversioned path> cvs add svn add git add +
got stage [-p] (optional)-- -- git add [-p] (required before git commit) +
got unstage [-p]-- -- git checkout [-p] / git restore [-p] +
got revert [-p] -- svn revert git checkout [-p] / git restore [-p] +
got commit cvs commit svn commit git commit PATH / git commit -a +
got tag cvs tag svn copy git tag +
got fetch cvsync / reposync svnsync git fetch +
got send -- -- git push +
got log -p -- svn log --diff git log -p +
got blame cvs blame svn praise git blame +
got tree -- svn list git ls-tree +
got rebase -- -- git rebase +
got histedit -- -- git rebase -i +
got merge (2 parents)cvs update -j -j svn merge git merge (up to N parents) +
got cherrypick cvs update -j -j svn merge -c <rev> git cherrypick +
got backout cvs update -j -j svn merge -c -<rev> git revert +
tog -- -- tig +
gotadmin pack -- svnadmin pack git repack +
gotadmin cleanup -- svnadmin cleanup git gc +
+ +