1 93069372 2023-06-25 stsp <!doctype html>
2 93069372 2023-06-25 stsp <html lang=en>
3 93069372 2023-06-25 stsp <meta charset=utf-8>
5 2b8aa933 2023-06-25 stsp <title>Game of Trees (Got): Comparison to other version control systems</title>
6 93069372 2023-06-25 stsp <meta name="description" content="Game of Trees (Got) Comparison to other version control systems">
7 93069372 2023-06-25 stsp <meta name="viewport" content="width=device-width, initial-scale=1">
8 93069372 2023-06-25 stsp <link rel="stylesheet" type="text/css" href="openbsd.css">
9 93069372 2023-06-25 stsp <link rel="canonical" href="https://gameoftrees.org/comparison.html">
12 93069372 2023-06-25 stsp <a href="index.html">
13 93069372 2023-06-25 stsp <i>Game of Trees</i></a>
14 93069372 2023-06-25 stsp Comparison to other version control systems
17 93069372 2023-06-25 stsp The user interface of the Got <a href="got.1.html">client</a> is heavily influenced
18 93069372 2023-06-25 stsp by Git, CVS, and SVN. Some inspiration was taken from Fossil and Mercurial.
20 93069372 2023-06-25 stsp <p>CVS and SVN users will find a familiar user interface which offers additional
21 93069372 2023-06-25 stsp commands for transferring changes between repositories across the network.
23 93069372 2023-06-25 stsp <p>Git users should be aware that Got treats every
24 93069372 2023-06-25 stsp <a href="git-repository.5.html">Git repository</a> as if it was <i>bare</i>.
25 93069372 2023-06-25 stsp This means Got completely ignores the Git work tree and the Git index.
26 93069372 2023-06-25 stsp A separate <a href="got-worktree.5.html">work tree</a> must be checked out from
27 93069372 2023-06-25 stsp a Git repository while working with Got.
29 93069372 2023-06-25 stsp <p>A unique feature of Got is its multi-process model working behind the scenes,
30 93069372 2023-06-25 stsp tailored to interfaces provided by the OpenBSD kernel.
31 93069372 2023-06-25 stsp Processes with an inherent attack surface, such as those talking to the network or
32 93069372 2023-06-25 stsp parsing the data in repositories, run in a separate address space and with
33 93069372 2023-06-25 stsp as little capabilities as possible.
34 93069372 2023-06-25 stsp The OpenBSD version of Got provides the strongest protections by using
35 93069372 2023-06-25 stsp <a href="https://man.openbsd.org/pledge">pledge</a> and
36 93069372 2023-06-25 stsp <a href="https://man.openbsd.org/unveil">unveil</a>
37 93069372 2023-06-25 stsp in combination.
38 93069372 2023-06-25 stsp For example, unveil enforces read-only access to repositories while the
39 93069372 2023-06-25 stsp Got <a href="gotd.8.html">server</a> is serving fetches.
40 93069372 2023-06-25 stsp The Got client main process restricts itself to the repository directory (read-only
41 3dd5e265 2023-06-28 bentley or read-write as appropriate), the <code>/tmp</code> directory, and the work tree.
42 93069372 2023-06-25 stsp Processes speaking the network protocol have no direct filesystem access at all.
43 93069372 2023-06-25 stsp All processes are pledged as tightly as possible to restrict the available system
44 93069372 2023-06-25 stsp calls to those required for regular operation.
45 93069372 2023-06-25 stsp The -portable version of Got uses Capsicum on FreeBSD and Landlock on Linux to restrict
46 93069372 2023-06-25 stsp filesystem access during network access and parsing of repository data, but does not
47 93069372 2023-06-25 stsp restrict the main process (yet?).
50 93069372 2023-06-25 stsp The table below lists network protocols supported by Got and some other systems.
51 93069372 2023-06-25 stsp Got clients interoperate well with popular Git hosting sites over SSH,
52 93069372 2023-06-25 stsp and Got servers can safely offer anonymous SSH access for public distribution.
53 5109ab3c 2024-04-23 stsp HTTP support in Got is limited to the clone and fetch operations.
58 3dd5e265 2023-06-28 bentley <td><b>Got</b>
59 3dd5e265 2023-06-28 bentley <td><b>CVS</b>
60 3dd5e265 2023-06-28 bentley <td><b>SVN</b>
61 3dd5e265 2023-06-28 bentley <td><b>Git</b>
64 5109ab3c 2024-04-23 stsp <td><code>SSH, git (client), HTTP (fetch)</code>
65 3dd5e265 2023-06-28 bentley <td><code>SSH, pserver</code>
66 3dd5e265 2023-06-28 bentley <td><code>SSH, svn, HTTP</code>
67 3dd5e265 2023-06-28 bentley <td><code>SSH, git, HTTP</code>
71 93069372 2023-06-25 stsp The following table lists applicable software licenses:
76 3dd5e265 2023-06-28 bentley <td><b>Got</b>
77 3dd5e265 2023-06-28 bentley <td><b>CVS</b>
78 3dd5e265 2023-06-28 bentley <td><b>SVN</b>
79 3dd5e265 2023-06-28 bentley <td><b>Git</b>
82 3dd5e265 2023-06-28 bentley <td><a href="releases/LICENCE">ISC</a>
83 3dd5e265 2023-06-28 bentley <td>GPLv1 or later
84 3dd5e265 2023-06-28 bentley <td>Apache 2
85 3dd5e265 2023-06-28 bentley <td>GPLv2 only
89 93069372 2023-06-25 stsp The table below lists some commonly used commands and their rough equivalents in other systems:
93 3dd5e265 2023-06-28 bentley <td><b>Got</b>
94 3dd5e265 2023-06-28 bentley <td><b>CVS</b>
95 3dd5e265 2023-06-28 bentley <td><b>SVN</b>
96 3dd5e265 2023-06-28 bentley <td><b>Git</b>
99 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#clone">got clone</a></code>
100 3dd5e265 2023-06-28 bentley <td><code>cvsync</code> / <code>reposync</code>
101 3dd5e265 2023-06-28 bentley <td><code>svnsync</code>
102 3dd5e265 2023-06-28 bentley <td><code>git clone --bare</code>
104 3dd5e265 2023-06-28 bentley <td><code><a href="gotadmin.1.html#init">gotadmin init</a></code>
105 3dd5e265 2023-06-28 bentley <td><code>cvs init</code>
106 3dd5e265 2023-06-28 bentley <td><code>svnadmin create</code>
107 5196bca3 2023-07-01 op <td><code>git init --bare</code>
109 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#checkout">got checkout</a></code>
110 3dd5e265 2023-06-28 bentley <td><code>cvs checkout</code>
111 3dd5e265 2023-06-28 bentley <td><code>svn checkout</code>
112 3dd5e265 2023-06-28 bentley <td><code>git clone</code> / <code>git worktree</code>
114 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#update">got update</a></code>
115 3dd5e265 2023-06-28 bentley <td><code>cvs update</code>
116 3dd5e265 2023-06-28 bentley <td><code>svn update</code>
117 3dd5e265 2023-06-28 bentley <td><code>git checkout HEAD</code>
119 3dd5e265 2023-06-28 bentley <td><code>got update -c <var><commit></var></code>
120 3dd5e265 2023-06-28 bentley <td><code>cvs update -r</code>
121 3dd5e265 2023-06-28 bentley <td><code>svn update -r</code>
122 3dd5e265 2023-06-28 bentley <td><code>git checkout <var><commit></var></code>
124 3dd5e265 2023-06-28 bentley <td><code>got update -b <var><branch></var></code>
125 3dd5e265 2023-06-28 bentley <td><code>cvs update -r</code>
126 3dd5e265 2023-06-28 bentley <td><code>svn switch</code>
127 3dd5e265 2023-06-28 bentley <td><code>git checkout <var><branch></var></code> / <code>git switch</code>
129 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#branch">got branch</a></code>
130 3dd5e265 2023-06-28 bentley <td><code>cvs tag</code>
131 3dd5e265 2023-06-28 bentley <td><code>svn copy</code>
132 3dd5e265 2023-06-28 bentley <td><code>git checkout -b <var><branch></var></code>
134 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#status">got status</a></code>
135 3dd5e265 2023-06-28 bentley <td><code>cvs update -n</code>
136 3dd5e265 2023-06-28 bentley <td><code>svn status</code>
137 3dd5e265 2023-06-28 bentley <td><code>git status -s</code>
139 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#diff">got diff</a></code>
140 3dd5e265 2023-06-28 bentley <td><code>cvs diff -uNP</code>
141 3dd5e265 2023-06-28 bentley <td><code>svn diff</code>
142 3dd5e265 2023-06-28 bentley <td><code>git diff --patience</code>
144 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#patch">got patch</a></code>
145 3dd5e265 2023-06-28 bentley <td><code>/usr/bin/patch</code>
146 3dd5e265 2023-06-28 bentley <td><code>svn patch</code>
147 5196bca3 2023-07-01 op <td><code>git apply</code>
149 15535bb2 2024-09-12 stsp <td><code><a href="got.1.html#add">got add</a></code>
150 3dd5e265 2023-06-28 bentley <td><code>cvs add</code>
151 3dd5e265 2023-06-28 bentley <td><code>svn add</code>
152 15535bb2 2024-09-12 stsp <td><code>git add <var><untracked file></var></code>
154 29531e41 2024-04-22 stsp <td><code><a href="got.1.html#stage">got stage</a> [-p]</code> <i>(staging optional)</i>
155 3dd5e265 2023-06-28 bentley <td>—
156 3dd5e265 2023-06-28 bentley <td>—
157 29531e41 2024-04-22 stsp <td><code>git add [-p]</code> / <code>git commit -p</code> <i>(staging required)</i>
159 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#unstage">got unstage</a> [-p]</code>
160 3dd5e265 2023-06-28 bentley <td>—
161 3dd5e265 2023-06-28 bentley <td>—
162 3dd5e265 2023-06-28 bentley <td><code>git checkout [-p]</code> / <code>git restore [-p]</code>
164 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#revert">got revert</a> [-p]</code>
165 3dd5e265 2023-06-28 bentley <td>—
166 3dd5e265 2023-06-28 bentley <td><code>svn revert</code>
167 3dd5e265 2023-06-28 bentley <td><code>git reset --hard</code>
169 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#commit">got commit</a></code>
170 3dd5e265 2023-06-28 bentley <td><code>cvs commit</code>
171 3dd5e265 2023-06-28 bentley <td><code>svn commit</code>
172 3dd5e265 2023-06-28 bentley <td><code>git commit <var><path></var></code> / <code>git commit -a</code>
174 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#tag">got tag</a></code>
175 3dd5e265 2023-06-28 bentley <td><code>cvs tag</code>
176 3dd5e265 2023-06-28 bentley <td><code>svn copy</code>
177 a7f03a02 2024-08-15 op <td><code>git tag -a</code>
179 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#fetch">got fetch</a></code>
180 3dd5e265 2023-06-28 bentley <td><code>cvsync</code> / <code>reposync</code>
181 3dd5e265 2023-06-28 bentley <td><code>svnsync</code>
182 3dd5e265 2023-06-28 bentley <td><code>git fetch</code>
184 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#send">got send</a></code>
185 3dd5e265 2023-06-28 bentley <td>—
186 3dd5e265 2023-06-28 bentley <td>—
187 3dd5e265 2023-06-28 bentley <td><code>git push</code>
189 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#log">got log</a> -p</code>
190 3dd5e265 2023-06-28 bentley <td>—
191 3dd5e265 2023-06-28 bentley <td><code>svn log --diff</code>
192 3dd5e265 2023-06-28 bentley <td><code>git log -p</code>
194 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#blame">got blame</a></code>
195 3dd5e265 2023-06-28 bentley <td><code>cvs blame</code>
196 3dd5e265 2023-06-28 bentley <td><code>svn praise</code>
197 3dd5e265 2023-06-28 bentley <td><code>git blame</code>
199 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#tree">got tree</a></code>
200 3dd5e265 2023-06-28 bentley <td>—
201 3dd5e265 2023-06-28 bentley <td><code>svn list</code>
202 3dd5e265 2023-06-28 bentley <td><code>git ls-tree</code>
204 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#rebase">got rebase</a></code>
205 3dd5e265 2023-06-28 bentley <td>—
206 3dd5e265 2023-06-28 bentley <td>—
207 3dd5e265 2023-06-28 bentley <td><code>git rebase</code>
209 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#histedit">got histedit</a></code>
210 3dd5e265 2023-06-28 bentley <td>—
211 3dd5e265 2023-06-28 bentley <td>—
212 3dd5e265 2023-06-28 bentley <td><code>git rebase -i</code>
214 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#merge">got merge</a></code> <i>(2 parents)</i>
215 3dd5e265 2023-06-28 bentley <td><code>cvs update -j -j</code>
216 3dd5e265 2023-06-28 bentley <td><code>svn merge</code>
217 3dd5e265 2023-06-28 bentley <td><code>git merge</code> <i>(up to N parents)</i>
219 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#cherrypick">got cherrypick</a></code>
220 3dd5e265 2023-06-28 bentley <td><code>cvs update -j -j</code>
221 3dd5e265 2023-06-28 bentley <td><code>svn merge -c <var><rev></var></code>
222 0118cca5 2023-07-01 naddy <td><code>git cherry-pick</code>
224 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#backout">got backout</a></code>
225 3dd5e265 2023-06-28 bentley <td><code>cvs update -j -j</code>
226 3dd5e265 2023-06-28 bentley <td><code>svn merge -c -<var><rev></var></code>
227 3dd5e265 2023-06-28 bentley <td><code>git revert</code>
229 3dd5e265 2023-06-28 bentley <td><code><a href="tog.1.html">tog</a></code>
230 3dd5e265 2023-06-28 bentley <td>—
231 3dd5e265 2023-06-28 bentley <td>—
232 3dd5e265 2023-06-28 bentley <td><code>tig</code>
234 3dd5e265 2023-06-28 bentley <td><code><a href="gotadmin.1.html#pack">gotadmin pack</a></code>
235 3dd5e265 2023-06-28 bentley <td>—
236 3dd5e265 2023-06-28 bentley <td><code>svnadmin pack</code>
237 3dd5e265 2023-06-28 bentley <td><code>git repack</code>
239 3dd5e265 2023-06-28 bentley <td><code><a href="gotadmin.1.html#cleanup">gotadmin cleanup</a></code>
240 3dd5e265 2023-06-28 bentley <td>—
241 3dd5e265 2023-06-28 bentley <td><code>svnadmin cleanup</code>
242 3dd5e265 2023-06-28 bentley <td><code>git gc</code>