Blame


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>
4 93069372 2023-06-25 stsp
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">
10 93069372 2023-06-25 stsp
11 93069372 2023-06-25 stsp <h2>
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
15 93069372 2023-06-25 stsp </h2>
16 93069372 2023-06-25 stsp <hr>
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.
19 93069372 2023-06-25 stsp
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.
22 93069372 2023-06-25 stsp
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.
28 93069372 2023-06-25 stsp
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?).
48 93069372 2023-06-25 stsp
49 93069372 2023-06-25 stsp <p>
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.
54 93069372 2023-06-25 stsp
55 3dd5e265 2023-06-28 bentley <table>
56 3dd5e265 2023-06-28 bentley <thead>
57 e9a2e341 2023-06-25 stsp <tr>
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>
62 3dd5e265 2023-06-28 bentley </thead>
63 93069372 2023-06-25 stsp <tr>
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>
68 93069372 2023-06-25 stsp </table>
69 93069372 2023-06-25 stsp
70 93069372 2023-06-25 stsp <p>
71 93069372 2023-06-25 stsp The following table lists applicable software licenses:
72 93069372 2023-06-25 stsp
73 3dd5e265 2023-06-28 bentley <table>
74 3dd5e265 2023-06-28 bentley <thead>
75 e9a2e341 2023-06-25 stsp <tr>
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>
80 3dd5e265 2023-06-28 bentley </thead>
81 93069372 2023-06-25 stsp <tr>
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
86 93069372 2023-06-25 stsp </table>
87 93069372 2023-06-25 stsp
88 93069372 2023-06-25 stsp <p>
89 93069372 2023-06-25 stsp The table below lists some commonly used commands and their rough equivalents in other systems:
90 3dd5e265 2023-06-28 bentley <table>
91 3dd5e265 2023-06-28 bentley <thead>
92 e9a2e341 2023-06-25 stsp <tr>
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>
97 3dd5e265 2023-06-28 bentley </thead>
98 93069372 2023-06-25 stsp <tr>
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>
103 93069372 2023-06-25 stsp <tr>
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>
108 93069372 2023-06-25 stsp <tr>
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>
113 93069372 2023-06-25 stsp <tr>
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>
118 93069372 2023-06-25 stsp <tr>
119 3dd5e265 2023-06-28 bentley <td><code>got update -c <var>&lt;commit&gt;</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>&lt;commit&gt;</var></code>
123 93069372 2023-06-25 stsp <tr>
124 3dd5e265 2023-06-28 bentley <td><code>got update -b <var>&lt;branch&gt;</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>&lt;branch&gt;</var></code> / <code>git switch</code>
128 93069372 2023-06-25 stsp <tr>
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>&lt;branch&gt;</var></code>
133 93069372 2023-06-25 stsp <tr>
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>
138 93069372 2023-06-25 stsp <tr>
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>
143 93069372 2023-06-25 stsp <tr>
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>
148 93069372 2023-06-25 stsp <tr>
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>&lt;untracked file&gt;</var></code>
153 93069372 2023-06-25 stsp <tr>
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>&mdash;
156 3dd5e265 2023-06-28 bentley <td>&mdash;
157 29531e41 2024-04-22 stsp <td><code>git add [-p]</code> / <code>git commit -p</code> <i>(staging required)</i>
158 93069372 2023-06-25 stsp <tr>
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>&mdash;
161 3dd5e265 2023-06-28 bentley <td>&mdash;
162 3dd5e265 2023-06-28 bentley <td><code>git checkout [-p]</code> / <code>git restore [-p]</code>
163 93069372 2023-06-25 stsp <tr>
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>&mdash;
166 3dd5e265 2023-06-28 bentley <td><code>svn revert</code>
167 3dd5e265 2023-06-28 bentley <td><code>git reset --hard</code>
168 93069372 2023-06-25 stsp <tr>
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>&lt;path&gt;</var></code> / <code>git commit -a</code>
173 93069372 2023-06-25 stsp <tr>
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>
178 93069372 2023-06-25 stsp <tr>
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>
183 93069372 2023-06-25 stsp <tr>
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>&mdash;
186 3dd5e265 2023-06-28 bentley <td>&mdash;
187 3dd5e265 2023-06-28 bentley <td><code>git push</code>
188 93069372 2023-06-25 stsp <tr>
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>&mdash;
191 3dd5e265 2023-06-28 bentley <td><code>svn log --diff</code>
192 3dd5e265 2023-06-28 bentley <td><code>git log -p</code>
193 93069372 2023-06-25 stsp <tr>
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>
198 93069372 2023-06-25 stsp <tr>
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>&mdash;
201 3dd5e265 2023-06-28 bentley <td><code>svn list</code>
202 3dd5e265 2023-06-28 bentley <td><code>git ls-tree</code>
203 93069372 2023-06-25 stsp <tr>
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>&mdash;
206 3dd5e265 2023-06-28 bentley <td>&mdash;
207 3dd5e265 2023-06-28 bentley <td><code>git rebase</code>
208 93069372 2023-06-25 stsp <tr>
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>&mdash;
211 3dd5e265 2023-06-28 bentley <td>&mdash;
212 3dd5e265 2023-06-28 bentley <td><code>git rebase -i</code>
213 93069372 2023-06-25 stsp <tr>
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>
218 93069372 2023-06-25 stsp <tr>
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>&lt;rev&gt;</var></code>
222 0118cca5 2023-07-01 naddy <td><code>git cherry-pick</code>
223 93069372 2023-06-25 stsp <tr>
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>&lt;rev&gt;</var></code>
227 3dd5e265 2023-06-28 bentley <td><code>git revert</code>
228 93069372 2023-06-25 stsp <tr>
229 3dd5e265 2023-06-28 bentley <td><code><a href="tog.1.html">tog</a></code>
230 3dd5e265 2023-06-28 bentley <td>&mdash;
231 3dd5e265 2023-06-28 bentley <td>&mdash;
232 3dd5e265 2023-06-28 bentley <td><code>tig</code>
233 93069372 2023-06-25 stsp <tr>
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>&mdash;
236 3dd5e265 2023-06-28 bentley <td><code>svnadmin pack</code>
237 3dd5e265 2023-06-28 bentley <td><code>git repack</code>
238 93069372 2023-06-25 stsp <tr>
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>&mdash;
241 3dd5e265 2023-06-28 bentley <td><code>svnadmin cleanup</code>
242 3dd5e265 2023-06-28 bentley <td><code>git gc</code>
243 93069372 2023-06-25 stsp </table>