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. Got clients interoperate well with popular Git hosting sites over SSH, and Got servers can safely offer anonymous SSH access for public distribution. HTTP support in Got is limited to the clone and fetch operations.
Got | CVS | SVN | Git |
SSH, git (client), HTTP (fetch)
| 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 init
| cvs init
| svnadmin create
| git init --bare
|
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 apply
|
got add <unversioned path>
| cvs add
| svn add
| git add
|
got stage [-p] (staging optional)
| — | — | git add [-p] / git commit -p (staging required)
|
got unstage [-p]
| — | — | git checkout [-p] / git restore [-p]
|
got revert [-p]
| — | svn revert
| git reset --hard
|
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 cherry-pick
|
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
|