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 For now, Got lacks support for Git's HTTP protocols, relying exclusively on
52 93069372 2023-06-25 stsp <a href="https://openssh.com">OpenSSH</a>.
53 93069372 2023-06-25 stsp Got clients interoperate well with popular Git hosting sites over SSH,
54 93069372 2023-06-25 stsp and Got servers can safely offer anonymous SSH access for public distribution.
55 93069372 2023-06-25 stsp
56 3dd5e265 2023-06-28 bentley <table>
57 3dd5e265 2023-06-28 bentley <thead>
58 e9a2e341 2023-06-25 stsp <tr>
59 3dd5e265 2023-06-28 bentley <td><b>Got</b>
60 3dd5e265 2023-06-28 bentley <td><b>CVS</b>
61 3dd5e265 2023-06-28 bentley <td><b>SVN</b>
62 3dd5e265 2023-06-28 bentley <td><b>Git</b>
63 3dd5e265 2023-06-28 bentley </thead>
64 93069372 2023-06-25 stsp <tr>
65 3dd5e265 2023-06-28 bentley <td><code>SSH, git (client)</code>
66 3dd5e265 2023-06-28 bentley <td><code>SSH, pserver</code>
67 3dd5e265 2023-06-28 bentley <td><code>SSH, svn, HTTP</code>
68 3dd5e265 2023-06-28 bentley <td><code>SSH, git, HTTP</code>
69 93069372 2023-06-25 stsp </table>
70 93069372 2023-06-25 stsp
71 93069372 2023-06-25 stsp <p>
72 93069372 2023-06-25 stsp The following table lists applicable software licenses:
73 93069372 2023-06-25 stsp
74 3dd5e265 2023-06-28 bentley <table>
75 3dd5e265 2023-06-28 bentley <thead>
76 e9a2e341 2023-06-25 stsp <tr>
77 3dd5e265 2023-06-28 bentley <td><b>Got</b>
78 3dd5e265 2023-06-28 bentley <td><b>CVS</b>
79 3dd5e265 2023-06-28 bentley <td><b>SVN</b>
80 3dd5e265 2023-06-28 bentley <td><b>Git</b>
81 3dd5e265 2023-06-28 bentley </thead>
82 93069372 2023-06-25 stsp <tr>
83 3dd5e265 2023-06-28 bentley <td><a href="releases/LICENCE">ISC</a>
84 3dd5e265 2023-06-28 bentley <td>GPLv1 or later
85 3dd5e265 2023-06-28 bentley <td>Apache 2
86 3dd5e265 2023-06-28 bentley <td>GPLv2 only
87 93069372 2023-06-25 stsp </table>
88 93069372 2023-06-25 stsp
89 93069372 2023-06-25 stsp <p>
90 93069372 2023-06-25 stsp The table below lists some commonly used commands and their rough equivalents in other systems:
91 3dd5e265 2023-06-28 bentley <table>
92 3dd5e265 2023-06-28 bentley <thead>
93 e9a2e341 2023-06-25 stsp <tr>
94 3dd5e265 2023-06-28 bentley <td><b>Got</b>
95 3dd5e265 2023-06-28 bentley <td><b>CVS</b>
96 3dd5e265 2023-06-28 bentley <td><b>SVN</b>
97 3dd5e265 2023-06-28 bentley <td><b>Git</b>
98 3dd5e265 2023-06-28 bentley </thead>
99 93069372 2023-06-25 stsp <tr>
100 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#clone">got clone</a></code>
101 3dd5e265 2023-06-28 bentley <td><code>cvsync</code> / <code>reposync</code>
102 3dd5e265 2023-06-28 bentley <td><code>svnsync</code>
103 3dd5e265 2023-06-28 bentley <td><code>git clone --bare</code>
104 93069372 2023-06-25 stsp <tr>
105 3dd5e265 2023-06-28 bentley <td><code><a href="gotadmin.1.html#init">gotadmin init</a></code>
106 3dd5e265 2023-06-28 bentley <td><code>cvs init</code>
107 3dd5e265 2023-06-28 bentley <td><code>svnadmin create</code>
108 5196bca3 2023-07-01 op <td><code>git init --bare</code>
109 93069372 2023-06-25 stsp <tr>
110 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#checkout">got checkout</a></code>
111 3dd5e265 2023-06-28 bentley <td><code>cvs checkout</code>
112 3dd5e265 2023-06-28 bentley <td><code>svn checkout</code>
113 3dd5e265 2023-06-28 bentley <td><code>git clone</code> / <code>git worktree</code>
114 93069372 2023-06-25 stsp <tr>
115 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#update">got update</a></code>
116 3dd5e265 2023-06-28 bentley <td><code>cvs update</code>
117 3dd5e265 2023-06-28 bentley <td><code>svn update</code>
118 3dd5e265 2023-06-28 bentley <td><code>git checkout HEAD</code>
119 93069372 2023-06-25 stsp <tr>
120 3dd5e265 2023-06-28 bentley <td><code>got update -c <var>&lt;commit&gt;</var></code>
121 3dd5e265 2023-06-28 bentley <td><code>cvs update -r</code>
122 3dd5e265 2023-06-28 bentley <td><code>svn update -r</code>
123 3dd5e265 2023-06-28 bentley <td><code>git checkout <var>&lt;commit&gt;</var></code>
124 93069372 2023-06-25 stsp <tr>
125 3dd5e265 2023-06-28 bentley <td><code>got update -b <var>&lt;branch&gt;</var></code>
126 3dd5e265 2023-06-28 bentley <td><code>cvs update -r</code>
127 3dd5e265 2023-06-28 bentley <td><code>svn switch</code>
128 3dd5e265 2023-06-28 bentley <td><code>git checkout <var>&lt;branch&gt;</var></code> / <code>git switch</code>
129 93069372 2023-06-25 stsp <tr>
130 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#branch">got branch</a></code>
131 3dd5e265 2023-06-28 bentley <td><code>cvs tag</code>
132 3dd5e265 2023-06-28 bentley <td><code>svn copy</code>
133 3dd5e265 2023-06-28 bentley <td><code>git checkout -b <var>&lt;branch&gt;</var></code>
134 93069372 2023-06-25 stsp <tr>
135 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#status">got status</a></code>
136 3dd5e265 2023-06-28 bentley <td><code>cvs update -n</code>
137 3dd5e265 2023-06-28 bentley <td><code>svn status</code>
138 3dd5e265 2023-06-28 bentley <td><code>git status -s</code>
139 93069372 2023-06-25 stsp <tr>
140 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#diff">got diff</a></code>
141 3dd5e265 2023-06-28 bentley <td><code>cvs diff -uNP</code>
142 3dd5e265 2023-06-28 bentley <td><code>svn diff</code>
143 3dd5e265 2023-06-28 bentley <td><code>git diff --patience</code>
144 93069372 2023-06-25 stsp <tr>
145 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#patch">got patch</a></code>
146 3dd5e265 2023-06-28 bentley <td><code>/usr/bin/patch</code>
147 3dd5e265 2023-06-28 bentley <td><code>svn patch</code>
148 5196bca3 2023-07-01 op <td><code>git apply</code>
149 93069372 2023-06-25 stsp <tr>
150 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#add">got add</a> <var>&lt;unversioned path&gt;</var></code>
151 3dd5e265 2023-06-28 bentley <td><code>cvs add</code>
152 3dd5e265 2023-06-28 bentley <td><code>svn add</code>
153 3dd5e265 2023-06-28 bentley <td><code>git add</code>
154 93069372 2023-06-25 stsp <tr>
155 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#stage">got stage</a> [-p]</code> <i>(optional)</i>
156 3dd5e265 2023-06-28 bentley <td>&mdash;
157 3dd5e265 2023-06-28 bentley <td>&mdash;
158 3dd5e265 2023-06-28 bentley <td><code>git add [-p]</code> <i>(required before git commit)</i>
159 93069372 2023-06-25 stsp <tr>
160 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#unstage">got unstage</a> [-p]</code>
161 3dd5e265 2023-06-28 bentley <td>&mdash;
162 3dd5e265 2023-06-28 bentley <td>&mdash;
163 3dd5e265 2023-06-28 bentley <td><code>git checkout [-p]</code> / <code>git restore [-p]</code>
164 93069372 2023-06-25 stsp <tr>
165 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#revert">got revert</a> [-p]</code>
166 3dd5e265 2023-06-28 bentley <td>&mdash;
167 3dd5e265 2023-06-28 bentley <td><code>svn revert</code>
168 3dd5e265 2023-06-28 bentley <td><code>git reset --hard</code>
169 93069372 2023-06-25 stsp <tr>
170 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#commit">got commit</a></code>
171 3dd5e265 2023-06-28 bentley <td><code>cvs commit</code>
172 3dd5e265 2023-06-28 bentley <td><code>svn commit</code>
173 3dd5e265 2023-06-28 bentley <td><code>git commit <var>&lt;path&gt;</var></code> / <code>git commit -a</code>
174 93069372 2023-06-25 stsp <tr>
175 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#tag">got tag</a></code>
176 3dd5e265 2023-06-28 bentley <td><code>cvs tag</code>
177 3dd5e265 2023-06-28 bentley <td><code>svn copy</code>
178 3dd5e265 2023-06-28 bentley <td><code>git tag</code>
179 93069372 2023-06-25 stsp <tr>
180 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#fetch">got fetch</a></code>
181 3dd5e265 2023-06-28 bentley <td><code>cvsync</code> / <code>reposync</code>
182 3dd5e265 2023-06-28 bentley <td><code>svnsync</code>
183 3dd5e265 2023-06-28 bentley <td><code>git fetch</code>
184 93069372 2023-06-25 stsp <tr>
185 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#send">got send</a></code>
186 3dd5e265 2023-06-28 bentley <td>&mdash;
187 3dd5e265 2023-06-28 bentley <td>&mdash;
188 3dd5e265 2023-06-28 bentley <td><code>git push</code>
189 93069372 2023-06-25 stsp <tr>
190 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#log">got log</a> -p</code>
191 3dd5e265 2023-06-28 bentley <td>&mdash;
192 3dd5e265 2023-06-28 bentley <td><code>svn log --diff</code>
193 3dd5e265 2023-06-28 bentley <td><code>git log -p</code>
194 93069372 2023-06-25 stsp <tr>
195 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#blame">got blame</a></code>
196 3dd5e265 2023-06-28 bentley <td><code>cvs blame</code>
197 3dd5e265 2023-06-28 bentley <td><code>svn praise</code>
198 3dd5e265 2023-06-28 bentley <td><code>git blame</code>
199 93069372 2023-06-25 stsp <tr>
200 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#tree">got tree</a></code>
201 3dd5e265 2023-06-28 bentley <td>&mdash;
202 3dd5e265 2023-06-28 bentley <td><code>svn list</code>
203 3dd5e265 2023-06-28 bentley <td><code>git ls-tree</code>
204 93069372 2023-06-25 stsp <tr>
205 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#rebase">got rebase</a></code>
206 3dd5e265 2023-06-28 bentley <td>&mdash;
207 3dd5e265 2023-06-28 bentley <td>&mdash;
208 3dd5e265 2023-06-28 bentley <td><code>git rebase</code>
209 93069372 2023-06-25 stsp <tr>
210 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#histedit">got histedit</a></code>
211 3dd5e265 2023-06-28 bentley <td>&mdash;
212 3dd5e265 2023-06-28 bentley <td>&mdash;
213 3dd5e265 2023-06-28 bentley <td><code>git rebase -i</code>
214 93069372 2023-06-25 stsp <tr>
215 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#merge">got merge</a></code> <i>(2 parents)</i>
216 3dd5e265 2023-06-28 bentley <td><code>cvs update -j -j</code>
217 3dd5e265 2023-06-28 bentley <td><code>svn merge</code>
218 3dd5e265 2023-06-28 bentley <td><code>git merge</code> <i>(up to N parents)</i>
219 93069372 2023-06-25 stsp <tr>
220 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#cherrypick">got cherrypick</a></code>
221 3dd5e265 2023-06-28 bentley <td><code>cvs update -j -j</code>
222 3dd5e265 2023-06-28 bentley <td><code>svn merge -c <var>&lt;rev&gt;</var></code>
223 0118cca5 2023-07-01 naddy <td><code>git cherry-pick</code>
224 93069372 2023-06-25 stsp <tr>
225 3dd5e265 2023-06-28 bentley <td><code><a href="got.1.html#backout">got backout</a></code>
226 3dd5e265 2023-06-28 bentley <td><code>cvs update -j -j</code>
227 3dd5e265 2023-06-28 bentley <td><code>svn merge -c -<var>&lt;rev&gt;</var></code>
228 3dd5e265 2023-06-28 bentley <td><code>git revert</code>
229 93069372 2023-06-25 stsp <tr>
230 3dd5e265 2023-06-28 bentley <td><code><a href="tog.1.html">tog</a></code>
231 3dd5e265 2023-06-28 bentley <td>&mdash;
232 3dd5e265 2023-06-28 bentley <td>&mdash;
233 3dd5e265 2023-06-28 bentley <td><code>tig</code>
234 93069372 2023-06-25 stsp <tr>
235 3dd5e265 2023-06-28 bentley <td><code><a href="gotadmin.1.html#pack">gotadmin pack</a></code>
236 3dd5e265 2023-06-28 bentley <td>&mdash;
237 3dd5e265 2023-06-28 bentley <td><code>svnadmin pack</code>
238 3dd5e265 2023-06-28 bentley <td><code>git repack</code>
239 93069372 2023-06-25 stsp <tr>
240 3dd5e265 2023-06-28 bentley <td><code><a href="gotadmin.1.html#cleanup">gotadmin cleanup</a></code>
241 3dd5e265 2023-06-28 bentley <td>&mdash;
242 3dd5e265 2023-06-28 bentley <td><code>svnadmin cleanup</code>
243 3dd5e265 2023-06-28 bentley <td><code>git gc</code>
244 93069372 2023-06-25 stsp </table>