bump version number
[got-portable.git] / gotadmin / gotadmin.1
blobd08ca8ce242a94adf46fcef60d73f582afbd6e6e
1 .\"
2 .\" Copyright (c) 2021 Stefan Sperling
3 .\"
4 .\" Permission to use, copy, modify, and distribute this software for any
5 .\" purpose with or without fee is hereby granted, provided that the above
6 .\" copyright notice and this permission notice appear in all copies.
7 .\"
8 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 .\"
16 .Dd $Mdocdate$
17 .Dt GOTADMIN 1
18 .Os
19 .Sh NAME
20 .Nm gotadmin
21 .Nd Game of Trees repository administration
22 .Sh SYNOPSIS
23 .Nm
24 .Op Fl hV
25 .Ar command
26 .Op Ar arg ...
27 .Sh DESCRIPTION
28 .Nm
29 is the repository maintenance tool for the
30 .Xr got 1
31 version control system.
32 .Pp
33 .Xr got 1
34 stores the history of tracked files in a Git repository, as used
35 by the Git version control system.
36 .Nm
37 provides commands for inspecting and manipulating the on-disk state of
38 Git repositories.
39 The repository format is described in
40 .Xr git-repository 5 .
41 .Pp
42 .Nm
43 provides global and command-specific options.
44 Global options must precede the command name, and are as follows:
45 .Bl -tag -width tenletters
46 .It Fl h
47 Display usage information and exit immediately.
48 .It Fl V , -version
49 Display program version and exit immediately.
50 .El
51 .Pp
52 The commands for
53 .Nm
54 are as follows:
55 .Bl -tag -width checkout
56 .It Cm init Oo Fl A Ar hashing-algorithm Oc Oo Fl b Ar branch Oc Ar repository-path
57 Create a new empty repository at the specified
58 .Ar repository-path .
59 .Pp
60 After
61 .Cm gotadmin init ,
62 the new repository must be populated before
63 .Cm got checkout
64 can be used.
65 The
66 .Cm got import
67 command can be used to populate the new repository with data from
68 a local directory.
69 Alternatively, on a server running
70 .Xr gotd 8 ,
71 the new repository can be made available to
72 .Xr got 1
74 .Xr git 1
75 clients by adding the repository to
76 .Xr gotd.conf 5
77 and restarting
78 .Xr gotd 8 .
79 Clients may then clone the new repository from the server, populate the cloned
80 repository, and then populate the new repository on the server via
81 .Cm got send
83 .Cm git push .
84 .Pp
85 The options for
86 .Cm gotadmin init
87 are as follows:
88 .Bl -tag -width Ds
89 .It Fl A Ar hashing-algorithm
90 Configure the repository's
91 .Ar hashing-algorithm
92 used for the computation of Git object IDs.
93 Possible values are
94 .Cm sha1
95 .Pq the default
97 .Cm sha256 .
98 .It Fl b Ar branch
99 Make the repository's HEAD reference point to the specified
100 .Ar branch
101 instead of the default branch
102 .Dq main .
106 .Cm gotadmin init
107 command is equivalent to
108 .Cm got init .
109 .It Cm info Op Fl r Ar repository-path
110 Display information about a repository.
111 This includes some configuration settings from
112 .Xr got.conf 5 ,
113 the object ID hashing algorithm,
114 and the number of objects stored in the repository, in packed or
115 loose form, as well as the current on-disk size of these objects.
117 The options for
118 .Cm gotadmin info
119 are as follows:
120 .Bl -tag -width Ds
121 .It Fl r Ar repository-path
122 Use the repository at the specified path.
123 If not specified, assume the repository is located at or above the current
124 working directory.
125 If this directory is a
126 .Xr got 1
127 work tree, use the repository path associated with this work tree.
129 .It Xo
130 .Cm pack
131 .Op Fl aDq
132 .Op Fl r Ar repository-path
133 .Op Fl x Ar reference
134 .Op Ar reference ...
136 Generate a new pack file and a corresponding pack file index.
137 By default, add any loose objects which are reachable via any references
138 to the generated pack file.
140 If one or more
141 .Ar reference
142 arguments is specified, only add objects which are reachable via the specified
143 references.
144 Each
145 .Ar reference
146 argument may either specify a specific reference or a reference namespace,
147 in which case all references within this namespace will be used.
149 .Cm gotadmin pack
150 always ignores references in the
151 .Pa refs/got/
152 namespace, effectively treating such references as if they did not refer
153 to any objects.
155 The options for
156 .Cm gotadmin pack
157 are as follows:
158 .Bl -tag -width Ds
159 .It Fl a
160 Add objects to the generated pack file even if they are already packed
161 in a different pack file.
162 Unless this option is specified, only loose objects will be added.
163 .It Fl D
164 Force the use of ref-delta representation for deltified objects.
165 If this option is not specified, offset-deltas will be used to represent
166 deltified objects.
167 .It Fl q
168 Suppress progress reporting output.
169 .It Fl r Ar repository-path
170 Use the repository at the specified path.
171 If not specified, assume the repository is located at or above the current
172 working directory.
173 If this directory is a
174 .Xr got 1
175 work tree, use the repository path associated with this work tree.
176 .It Fl x Ar reference
177 Exclude objects reachable via the specified
178 .Ar reference
179 from the pack file.
181 .Ar reference
182 argument may either specify a specific reference or a reference namespace,
183 in which case all references within this namespace will be excluded.
185 .Fl x
186 option may be specified multiple times to build a list of references to exclude.
188 Exclusion takes precedence over inclusion.
189 If a reference appears in both the included and excluded lists, it will
190 be excluded.
192 .Tg ix
193 .It Cm indexpack Ar packfile-path
194 .Dl Pq alias: Cm ix
195 Create a pack index for the pack file at
196 .Ar packfile-path .
198 A pack index is required for using the corresponding pack file with
199 .Xr got 1 .
200 Usually, a pack index will be created by commands such as
201 .Cm gotadmin pack
203 .Cm got fetch
204 as part of regular operation.
206 .Cm gotadmin indexpack
207 command may be used to recover from a corrupt or missing index.
208 A given pack file will always yield the same bit-identical index.
210 The provided
211 .Ar packfile-path
212 must be located within the
213 .Pa objects/pack/
214 directory of the repository and should end in
215 .Pa .pack .
216 The filename of the corresponding pack index is equivalent, except
217 that it ends in
218 .Pa .idx .
219 .Tg ls
220 .It Xo
221 .Cm listpack
222 .Op Fl hs
223 .Ar packfile-path
225 .Dl Pq alias: Cm ls
226 List the contents of the pack file at
227 .Ar packfile-path .
229 Each object contained in the pack file will be displayed on a single line.
230 The information shown includes the object ID, object type, object offset,
231 and object size.
233 If a packed object is deltified against another object, the delta base
234 will be shown as well.
235 For offset deltas, the delta base is identified via an offset into the
236 pack file.
237 For reference deltas, the delta base is identified via an object ID.
239 The provided
240 .Ar packfile-path
241 must be located within the
242 .Pa objects/pack/
243 directory of the repository and should end in
244 .Pa .pack .
245 The corresponding pack index must exist and can be created with
246 .Cm gotadmin indexpack
247 if it is missing.
249 The options for
250 .Cm gotadmin listpack
251 are as follows:
252 .Bl -tag -width Ds
253 .It Fl h
254 Show object sizes in human-readable form.
255 .It Fl s
256 Display statistics about the pack file after listing objects.
257 This includes the total number of objects stored in the pack file
258 and a break-down of the number of objects per object type.
260 .Tg cl
261 .It Xo
262 .Cm cleanup
263 .Op Fl anpq
264 .Op Fl r Ar repository-path
266 .Dl Pq alias: Cm cl
267 Purge unreferenced loose objects and redundant pack files from the
268 repository and display the amount of disk space which has been freed
269 as a result.
271 Unreferenced objects are present in the repository but cannot be
272 reached via any reference in the entire
273 .Pa refs/
274 namespace.
275 Objects will usually become unreferenced as a result of deleting
276 branches, tags, or other references with
277 .Cm got branch -d ,
278 .Cm got ref -d ,
280 .Cm got fetch -X .
282 Loose objects are stored as individual files beneath the repository's
283 .Pa objects/
284 directory,
285 spread across 256 sub-directories named after the 256 possible
286 hexadecimal values of the first byte of an object identifier.
288 Packed objects are stored in pack files under
289 .Pa objects/pack/ .
291 If redundant copies of packed objects exist in loose form, such
292 redundant copies will be purged.
293 If all the objects of a pack file are present in other pack files,
294 the redundant pack file will be purged.
295 Pack files will usually become redundant as a result of repacking the
296 repository with
298 .Cm pack Fl a .
300 References in the
301 .Pa refs/got
302 namespace may prevent objects from being purged.
303 This includes references in the
304 .Pa refs/got/worktree
305 namespace created by
306 .Cm got checkout
308 .Cm got update ,
309 as well as references in the
310 .Pa refs/got/backup
311 namespace created by
312 .Cm got rebase
314 .Cm got histedit .
315 .Cm gotadmin cleanup
316 will only purge corresponding objects once such references have been
317 deleted with
318 .Cm got rebase -X ,
319 .Cm got histedit -X ,
321 .Cm got ref -d .
324 .Dq preciousObjects
325 Git extension is intended to prevent the removal of objects from a repository.
326 .Cm gotadmin cleanup
327 will refuse to operate on repositories where this extension is active.
329 For compatibility with Git, if a file with the extension
330 .Pa .keep
331 exists and corresponds to a pack file with the extension
332 .Pa .pack
333 then this pack file will not be removed.
335 Some Git repositories contain pack index files which lack a corresponding
336 pack file, which is an inconsistent repository state.
337 In such cases,
338 .Cm gotadmin cleanup -p -n
339 will display a list of affected pack index files.
340 Whenever possible, the missing pack files should be restored.
341 If restoring missing pack files is not possible, then affected pack index
342 files can be removed with
343 .Cm gotadmin cleanup -p .
345 The options for
346 .Cm gotadmin cleanup
347 are as follows:
348 .Bl -tag -width Ds
349 .It Fl a
350 Delete all redundant loose and packed objects.
351 By default, objects which are newer than an implementation-defined
352 modification timestamp are kept on disk to prevent race conditions
353 with other commands that add new objects to the repository while
354 .Cm gotadmin cleanup
355 is running.
356 .It Fl n
357 Display the usual progress output and summary information but do not actually
358 remove any files from disk.
359 .It Fl p
360 Instead of purging unreferenced loose objects and redundant pack files,
361 remove any pack index files which do not have a corresponding pack file.
362 .It Fl q
363 Suppress progress reporting and disk space summary output.
364 .It Fl r Ar repository-path
365 Use the repository at the specified path.
366 If not specified, assume the repository is located at or above the current
367 working directory.
368 If this directory is a
369 .Xr got 1
370 work tree, use the repository path associated with this work tree.
372 .It Xo
373 .Cm dump
374 .Op Fl q
375 .Op Fl r Ar repository-path
376 .Op Fl x Ar reference
377 .Op Ar reference ...
379 Dump the contents of the repository to standard output in Git bundle format.
381 If one or more
382 .Ar reference
383 arguments is specified, only add objects which are reachable via the specified
384 references.
385 Each
386 .Ar reference
387 argument may either specify a specific reference or a reference namespace,
388 in which case all references within this namespace will be used.
390 The options for
392 .Cm dump
393 are as follows:
394 .Bl -tag -width Ds
395 .It Fl q
396 Suppress progress reporting output.
397 .It Fl r Ar repository-path
398 Use the repository at the specified path.
399 If not specified, assume the repository is located at or above the current
400 working directory.
401 If this directory is a
402 .Xr got 1
403 work tree, use the repository path associated with this work tree.
404 .It Fl x Ar reference
405 Exclude objects reachable via the specified
406 .Ar reference
407 from the bundle.
409 .Ar reference
410 argument may either specify a specific reference or a reference namespace,
411 in which case all references within this namespace will be excluded.
413 .Fl x
414 option may be specified multiple times to build a list of references to exclude.
416 Exclusion takes precedence over inclusion.
417 If a reference appears in both the included and excluded lists, it will
418 be excluded.
420 .It Xo
421 .Cm load
422 .Op Fl nq
423 .Op Fl l Ar bundle-path
424 .Op Fl r Ar repository-path
425 .Op Ar reference ...
427 Read a Git bundle stream from standard input and load its data into
428 a repository.
430 If one or more
431 .Ar reference
432 arguments are provided then only load the specified references
433 from the bundle.
434 Otherwise, all references will be loaded.
436 The options for
437 .Cm gotadmin load
438 are as follows:
439 .Bl -tag -width Ds
440 .It Fl l Ar bundle-path
441 List references available for loading from the bundle at the specified
442 .Ar bundle-path
443 and exit immediately.
444 If the
445 .Fl l
446 option is specified then no
447 .Ar reference
448 arguments are allowed.
450 .Fl l
451 option is incompatible with the
452 .Fl n
453 option.
454 .It Fl n
455 Attempt to load the bundle but don't install new packfile or update any
456 reference.
457 Can be used to verify the integrity of the bundle.
458 .It Fl q
459 Suppress progress reporting output.
460 .It Fl r Ar repository-path
461 Use the repository at the specified path.
462 If not specified, assume the repository is located at or above the
463 current working directory.
464 If this directory is a
465 .Xr got 1
466 work tree, use the repository path associated with this work tree.
469 .Sh EXIT STATUS
470 .Ex -std gotadmin
471 .Sh SEE ALSO
472 .Xr got 1 ,
473 .Xr tog 1 ,
474 .Xr git-repository 5 ,
475 .Xr got.conf 5
476 .Sh AUTHORS
477 .An Christian Weisgerber Aq Mt naddy@openbsd.org
478 .An Josh Rickmar Aq Mt jrick@zettaport.com
479 .An Klemens Nanni Aq Mt kn@openbsd.org
480 .An Omar Polo Aq Mt op@openbsd.org
481 .An Ori Bernstein Aq Mt ori@openbsd.org
482 .An Stefan Sperling Aq Mt stsp@openbsd.org
483 .An Tracey Emery Aq Mt tracey@traceyemery.net
484 .Sh CAVEATS
486 is a work-in-progress and some features remain to be implemented.
488 At present, the user has to fall back on
489 .Xr git 1
490 to perform some tasks.
491 In particular:
492 .Bl -bullet
494 Exporting data from repositories requires
495 .Xr git-fast-export 1 .
497 Importing data into repositories requires
498 .Xr git-fast-import 1 .
500 .Sh BUGS
501 Disk space savings reported by
502 .Cm gotadmin cleanup
503 will be misleading if the repository contains object files that were
504 hard-linked from another repository.
505 Such hard-links will be created by certain
506 .Xr git 1
507 commands.
508 By itself,
509 .Xr got 1
510 will never create hard-linked object files.