Blob


1 .\"
2 .\" Copyright (c) 2017 Martin Pieuchot
3 .\" Copyright (c) 2018, 2019 Stefan Sperling
4 .\"
5 .\" Permission to use, copy, modify, and distribute this software for any
6 .\" purpose with or without fee is hereby granted, provided that the above
7 .\" copyright notice and this permission notice appear in all copies.
8 .\"
9 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 .\"
17 .Dd $Mdocdate$
18 .Dt GOT 1
19 .Os
20 .Sh NAME
21 .Nm got
22 .Nd Game of Trees
23 .Sh SYNOPSIS
24 .Nm
25 .Ar command
26 .Op Fl h
27 .Op Ar arg ...
28 .Sh DESCRIPTION
29 .Nm
30 is a version control system which stores the history of tracked files
31 in a Git repository, as used by the Git version control system.
32 This repository format is described in
33 .Xr git-repository 5 .
34 .Pp
35 .Nm
36 is a
37 .Dq distributed
38 version control system because every copy of a repository is writeable.
39 Modifications made to files can be synchronized between repositories
40 at any time.
41 .Pp
42 Files managed by
43 .Nm
44 must be checked out from the repository for modification.
45 Checked out files are stored in a
46 .Em work tree
47 which can be placed at an arbitrary directory in the filesystem hierarchy.
48 The on-disk format of this work tree is described in
49 .Xr got-worktree 5 .
50 .Pp
51 .Nm
52 provides global and command-specific options.
53 Global options must precede the command name, and are as follows:
54 .Bl -tag -width tenletters
55 .It Fl h
56 Display usage information and exit immediately.
57 .It Fl V
58 Display program version and exit immediately.
59 .El
60 .Pp
61 The commands for
62 .Nm
63 are as follows:
64 .Bl -tag -width checkout
65 .It Cm init Ar repository-path
66 Create a new empty repository at the specified
67 .Ar repository-path .
68 .Pp
69 After
70 .Cm got init ,
71 the
72 .Cm got import
73 command must be used to populate the empty repository before
74 .Cm got checkout
75 can be used.
76 .It Cm in
77 Short alias for
78 .Cm init .
79 .It Cm import Oo Fl b Ar branch Oc Oo Fl m Ar message Oc Oo Fl r Ar repository-path Oc Oo Fl I Ar pattern Oc Ar directory
80 Create an initial commit in a repository from the file hierarchy
81 within the specified
82 .Ar directory .
83 The created commit will not have any parent commits, i.e. it will be a
84 root commit.
85 Also create a new reference which provides a branch name for the newly
86 created commit.
87 Show the path of each imported file to indicate progress.
88 .Pp
89 The
90 .Cm got import
91 command requires the
92 .Ev GOT_AUTHOR
93 environment variable to be set,
94 unless Git's
95 .Dv user.name
96 and
97 .Dv user.email
98 configuration settings can be obtained from the repository's
99 .Pa .git/config
100 file or from Git's global
101 .Pa ~/.gitconfig
102 configuration file.
103 .Pp
104 The options for
105 .Cm got import
106 are as follows:
107 .Bl -tag -width Ds
108 .It Fl b Ar branch
109 Create the specified
110 .Ar branch
111 instead of creating the default branch
112 .Dq master .
113 Use of this option is required if the
114 .Dq master
115 branch already exists.
116 .It Fl m Ar message
117 Use the specified log message when creating the new commit.
118 Without the
119 .Fl m
120 option,
121 .Cm got import
122 opens a temporary file in an editor where a log message can be written.
123 .It Fl r Ar repository-path
124 Use the repository at the specified path.
125 If not specified, assume the repository is located at or above the current
126 working directory.
127 .It Fl I Ar pattern
128 Ignore files or directories with a name which matches the specified
129 .Ar pattern .
130 This option may be specified multiple times to build a list of ignore patterns.
131 The
132 .Ar pattern
133 follows the globbing rules documented in
134 .Xr glob 7 .
135 .El
136 .It Cm im
137 Short alias for
138 .Cm import .
139 .It Cm checkout Oo Fl b Ar branch Oc Oo Fl c Ar commit Oc Oo Fl p Ar path-prefix Oc Ar repository-path Op Ar work-tree-path
140 Copy files from a repository into a new work tree.
141 If the
142 .Ar work tree path
143 is not specified, either use the last component of
144 .Ar repository path ,
145 or if a
146 .Ar path prefix
147 was specified use the last component of
148 .Ar path prefix .
149 .Pp
150 The options for
151 .Cm got checkout
152 are as follows:
153 .Bl -tag -width Ds
154 .It Fl b Ar branch
155 Check out files from a commit on the specified
156 .Ar branch .
157 If this option is not specified, a branch resolved via the repository's HEAD
158 reference will be used.
159 .It Fl c Ar commit
160 Check out files from the specified
161 .Ar commit
162 on the selected branch.
163 The expected argument is a commit ID SHA1 hash or an existing reference
164 or tag name which will be resolved to a commit ID.
165 An abbreviated hash argument will be expanded to a full SHA1 hash
166 automatically, provided the abbreviation is unique.
167 If this option is not specified, the most recent commit on the selected
168 branch will be used.
169 .It Fl p Ar path-prefix
170 Restrict the work tree to a subset of the repository's tree hierarchy.
171 Only files beneath the specified
172 .Ar path-prefix
173 will be checked out.
174 .El
175 .It Cm co
176 Short alias for
177 .Cm checkout .
178 .It Cm update Oo Fl b Ar branch Oc Oo Fl c Ar commit Oc Op Ar path ...
179 Update an existing work tree to a different commit.
180 Show the status of each affected file, using the following status codes:
181 .Bl -column YXZ description
182 .It U Ta file was updated and contained no local changes
183 .It G Ta file was updated and local changes were merged cleanly
184 .It C Ta file was updated and conflicts occurred during merge
185 .It D Ta file was deleted
186 .It A Ta new file was added
187 .It \(a~ Ta versioned file is obstructed by a non-regular file
188 .It ! Ta a missing versioned file was restored
189 .El
190 .Pp
191 If no
192 .Ar path
193 is specified, update the entire work tree.
194 Otherwise, restrict the update operation to files at or within the
195 specified paths.
196 Each path is required to exist in the update operation's target commit.
197 Files in the work tree outside specified paths will remain unchanged and
198 will retain their previously recorded base commit.
199 Some
200 .Nm
201 commands may refuse to run while the work tree contains files from
202 multiple base commits.
203 The base commit of such a work tree can be made consistent by running
204 .Cm got update
205 across the entire work tree.
206 Specifying a
207 .Ar path
208 is incompatible with the
209 .Fl b
210 option.
211 .Pp
212 .Cm got update
213 cannot update paths with staged changes.
214 If changes have been staged with
215 .Cm got stage ,
216 these changes must first be committed with
217 .Cm got commit
218 or unstaged with
219 .Cm got unstage .
220 .Pp
221 The options for
222 .Cm got update
223 are as follows:
224 .Bl -tag -width Ds
225 .It Fl b Ar branch
226 Switch the work tree's branch reference to the specified
227 .Ar branch
228 before updating the work tree.
229 This option requires that all paths in the work tree are updated.
230 .It Fl c Ar commit
231 Update the work tree to the specified
232 .Ar commit .
233 The expected argument is a commit ID SHA1 hash or an existing reference
234 or tag name which will be resolved to a commit ID.
235 An abbreviated hash argument will be expanded to a full SHA1 hash
236 automatically, provided the abbreviation is unique.
237 If this option is not specified, the most recent commit on the work tree's
238 branch will be used.
239 .El
240 .It Cm up
241 Short alias for
242 .Cm update .
243 .It Cm status Op Ar path ...
244 Show the current modification status of files in a work tree,
245 using the following status codes:
246 .Bl -column YXZ description
247 .It M Ta modified file
248 .It A Ta file scheduled for addition in next commit
249 .It D Ta file scheduled for deletion in next commit
250 .It C Ta modified or added file which contains merge conflicts
251 .It ! Ta versioned file was expected on disk but is missing
252 .It \(a~ Ta versioned file is obstructed by a non-regular file
253 .It ? Ta unversioned item not tracked by
254 .Nm
255 .It N Ta non-existent
256 .Ar path
257 specified on the command line
258 .El
259 .Pp
260 If no
261 .Ar path
262 is specified, show modifications in the entire work tree.
263 Otherwise, show modifications at or within the specified paths.
264 .Pp
265 If changes have been staged with
266 .Cm got stage ,
267 staged changes are shown in the second output column, using the following
268 status codes:
269 .Bl -column YXZ description
270 .It M Ta file modification is staged
271 .It A Ta file addition is staged
272 .It D Ta file deletion is staged
273 .El
274 .Pp
275 Changes created on top of staged changes are indicated in the first column:
276 .Bl -column YXZ description
277 .It MM Ta file was modified after earlier changes have been staged
278 .It MA Ta file was modified after having been staged for addition
279 .El
280 .Pp
281 For compatibility with
282 .Xr cvs 1
283 and
284 .Xr git 1 ,
285 .Cm got status
286 reads
287 .Xr glob 7
288 patterns from
289 .Pa .cvsignore
290 and
291 .Pa .gitignore
292 files in each traversed directory and will not display unversioned files
293 which match these patterns.
294 As an extension to
295 .Xr glob 7
296 matching rules,
297 .Cm got status
298 supports consecutive asterisks,
299 .Dq ** ,
300 which will match an arbitrary amount of directories.
301 Unlike
302 .Xr cvs 1 ,
303 .Cm got status
304 only supports a single ignore pattern per line.
305 Unlike
306 .Xr git 1 ,
307 .Cm got status
308 does not support negated ignore patterns prefixed with
309 .Dq \&! ,
310 and gives no special significance to the location of path component separators,
311 .Dq / ,
312 in a pattern.
313 .It Cm st
314 Short alias for
315 .Cm status .
316 .It Cm log Oo Fl c Ar commit Oc Oo Fl C Ar number Oc Oo Fl f Oc Oo Fl l Ar N Oc Oo Fl p Oc Oo Fl r Ar repository-path Oc Op Ar path
317 Display history of a repository.
318 If a
319 .Ar path
320 is specified, show only commits which modified this path.
321 .Pp
322 The options for
323 .Cm got log
324 are as follows:
325 .Bl -tag -width Ds
326 .It Fl c Ar commit
327 Start traversing history at the specified
328 .Ar commit .
329 The expected argument is a commit ID SHA1 hash or an existing reference
330 or tag name which will be resolved to a commit ID.
331 An abbreviated hash argument will be expanded to a full SHA1 hash
332 automatically, provided the abbreviation is unique.
333 If this option is not specified, default to the work tree's current branch
334 if invoked in a work tree, or to the repository's HEAD reference.
335 .It Fl C Ar number
336 Set the number of context lines shown in diffs with
337 .Fl p .
338 By default, 3 lines of context are shown.
339 .It Fl f
340 Restrict history traversal to the first parent of each commit.
341 This shows the linear history of the current branch only.
342 Merge commits which affected the current branch will be shown but
343 individual commits which originated on other branches will be omitted.
344 .It Fl l Ar N
345 Limit history traversal to a given number of commits.
346 If this option is not specified, a default limit value of zero is used,
347 which is treated as an unbounded limit.
348 The
349 .Ev GOT_LOG_DEFAULT_LIMIT
350 environment variable may be set to change this default value.
351 .It Fl p
352 Display the patch of modifications made in each commit.
353 If a
354 .Ar path
355 is specified, only show the patch of modifications at or within this path.
356 .It Fl r Ar repository-path
357 Use the repository at the specified path.
358 If not specified, assume the repository is located at or above the current
359 working directory.
360 If this directory is a
361 .Nm
362 work tree, use the repository path associated with this work tree.
363 .El
364 .It Cm diff Oo Fl C Ar number Oc Oo Fl r Ar repository-path Oc Oo Fl s Oc Op Ar object1 Ar object2 | Ar path
365 When invoked within a work tree with less than two arguments, display
366 uncommitted changes in the work tree.
367 If a
368 .Ar path
369 is specified, only show changes within this path.
370 .Pp
371 If two arguments are provided, treat each argument as a reference, a tag
372 name, or an object ID SHA1 hash, and display differences between the
373 corresponding objects.
374 Both objects must be of the same type (blobs, trees, or commits).
375 An abbreviated hash argument will be expanded to a full SHA1 hash
376 automatically, provided the abbreviation is unique.
377 .Pp
378 The options for
379 .Cm got diff
380 are as follows:
381 .Bl -tag -width Ds
382 .It Fl C Ar number
383 Set the number of context lines shown in the diff.
384 By default, 3 lines of context are shown.
385 .It Fl r Ar repository-path
386 Use the repository at the specified path.
387 If not specified, assume the repository is located at or above the current
388 working directory.
389 If this directory is a
390 .Nm
391 work tree, use the repository path associated with this work tree.
392 .It Fl s
393 Show changes staged with
394 .Cm got stage
395 instead of showing local changes.
396 This option is only valid when
397 .Cm got diff
398 is invoked in a work tree.
399 .El
400 .It Cm di
401 Short alias for
402 .Cm diff .
403 .It Cm blame Oo Fl c Ar commit Oc Oo Fl r Ar repository-path Oc Ar path
404 Display line-by-line history of a file at the specified path.
405 .Pp
406 The options for
407 .Cm got blame
408 are as follows:
409 .Bl -tag -width Ds
410 .It Fl c Ar commit
411 Start traversing history at the specified
412 .Ar commit .
413 The expected argument is a commit ID SHA1 hash or an existing reference
414 or tag name which will be resolved to a commit ID.
415 An abbreviated hash argument will be expanded to a full SHA1 hash
416 automatically, provided the abbreviation is unique.
417 .It Fl r Ar repository-path
418 Use the repository at the specified path.
419 If not specified, assume the repository is located at or above the current
420 working directory.
421 If this directory is a
422 .Nm
423 work tree, use the repository path associated with this work tree.
424 .El
425 .It Cm bl
426 Short alias for
427 .Cm blame .
428 .It Cm tree Oo Fl c Ar commit Oc Oo Fl r Ar repository-path Oc Oo Fl i Oc Oo Fl R Oc Op Ar path
429 Display a listing of files and directories at the specified
430 directory path in the repository.
431 Entries shown in this listing may carry one of the following trailing
432 annotations:
433 .Bl -column YXZ description
434 .It @ Ta entry is a symbolic link
435 .It / Ta entry is a directory
436 .It * Ta entry is an executable file
437 .It $ Ta entry is a Git submodule
438 .El
439 .Pp
440 If no
441 .Ar path
442 is specified, list the repository path corresponding to the current
443 directory of the work tree, or the root directory of the repository
444 if there is no work tree.
445 .Pp
446 The options for
447 .Cm got tree
448 are as follows:
449 .Bl -tag -width Ds
450 .It Fl c Ar commit
451 List files and directories as they appear in the specified
452 .Ar commit .
453 The expected argument is a commit ID SHA1 hash or an existing reference
454 or tag name which will be resolved to a commit ID.
455 An abbreviated hash argument will be expanded to a full SHA1 hash
456 automatically, provided the abbreviation is unique.
457 .It Fl r Ar repository-path
458 Use the repository at the specified path.
459 If not specified, assume the repository is located at or above the current
460 working directory.
461 If this directory is a
462 .Nm
463 work tree, use the repository path associated with this work tree.
464 .It Fl i
465 Show object IDs of files (blob objects) and directories (tree objects).
466 .It Fl R
467 Recurse into sub-directories in the repository.
468 .El
469 .It Cm tr
470 Short alias for
471 .Cm tree .
472 .It Cm ref Oo Fl r Ar repository-path Oc Oo Fl l Oc Oo Fl d Ar name Oc Oo Fl s Oc Op Ar name Ar target
473 Manage references in a repository.
474 .Pp
475 If no options are passed, expect two arguments and attempt to create,
476 or update, the reference with the given
477 .Ar name ,
478 and make it point at the given
479 .Ar target .
480 The target may be an object ID SHA1 hash or an existing reference which
481 will be resolved to an object ID.
482 An abbreviated hash argument will be expanded to a full SHA1 hash
483 automatically, provided the abbreviation is unique.
484 .Pp
485 The options for
486 .Cm got ref
487 are as follows:
488 .Bl -tag -width Ds
489 .It Fl r Ar repository-path
490 Use the repository at the specified path.
491 If not specified, assume the repository is located at or above the current
492 working directory.
493 If this directory is a
494 .Nm
495 work tree, use the repository path associated with this work tree.
496 .It Fl l
497 List all existing references in the repository.
498 .It Fl d Ar name
499 Delete the reference with the specified name from the repository.
500 .It Fl s
501 Create a symbolic reference pointing at the specified
502 .Ar target ,
503 which must be an existing reference.
504 Care should be taken not to create loops between references when
505 this option is used.
506 .El
507 .It Cm branch Oo Fl r Ar repository-path Oc Oo Fl l Oc Oo Fl d Ar name Oc Op Ar name Op Ar commit
508 Manage branches in a repository.
509 .Pp
510 Branches are managed via references which live in the
511 .Dq refs/heads/
512 reference namespace.
513 The
514 .Cm got branch
515 command operates on references in this namespace only.
516 .Pp
517 If invoked in a work tree without any arguments, print the name of the
518 work tree's current branch.
519 If one or two arguments are passed, attempt to create a branch reference
520 with the given
521 .Ar name ,
522 and make it point at the given
523 .Ar commit .
524 The expected
525 .Ar commit
526 argument is a commit ID SHA1 hash or an existing reference
527 or tag name which will be resolved to a commit ID.
528 If no
529 .Ar commit
530 is specified, default to the latest commit on the work tree's current
531 branch if invoked in a work tree, or to a commit resolved via the
532 repository's HEAD reference.
533 .Pp
534 The options for
535 .Cm got branch
536 are as follows:
537 .Bl -tag -width Ds
538 .It Fl r Ar repository-path
539 Use the repository at the specified path.
540 If not specified, assume the repository is located at or above the current
541 working directory.
542 If this directory is a
543 .Nm
544 work tree, use the repository path associated with this work tree.
545 .It Fl l
546 List all existing branches in the repository.
547 If invoked in a work tree, the work tree's current branch is shown
548 with one the following annotations:
549 .Bl -column YXZ description
550 .It * Ta work tree's base commit matches the branch tip
551 .It \(a~ Ta work tree's base commit is out-of-date
552 .El
553 .It Fl d Ar name
554 Delete the branch with the specified name from the repository.
555 Only the branch reference is deleted.
556 Any commit, tree, and blob objects belonging to the branch
557 remain in the repository and may be removed separately with
558 Git's garbage collector.
559 .El
560 .It Cm br
561 Short alias for
562 .Cm branch .
563 .It Cm tag Oo Fl m Ar message Oc Oo Fl r Ar repository-path Oc Oo Fl l Oc Ar name Op Ar commit Oc
564 Manage tags in a repository.
565 .Pp
566 Tags are managed via references which live in the
567 .Dq refs/tags/
568 reference namespace.
569 The
570 .Cm got tag
571 command operates on references in this namespace only.
572 References in this namespace point at tag objects which contain a pointer
573 to another object, a tag message, as well as author and timestamp information.
574 .Pp
575 Expect one or two arguments and attempt to create a tag with the given
576 .Ar name ,
577 and make this tag point at the given
578 .Ar commit .
579 If no commit is specified, default to the latest commit on the work tree's
580 current branch if invoked in a work tree, and to a commit resolved via
581 the repository's HEAD reference otherwise.
582 Otherwise, the expected argument is a commit ID SHA1 hash or an existing
583 reference or tag name which will be resolved to a commit ID.
584 An abbreviated hash argument will be expanded to a full SHA1 hash
585 automatically, provided the abbreviation is unique.
586 .Pp
587 The options for
588 .Cm got tag
589 are as follows:
590 .Bl -tag -width Ds
591 .It Fl m Ar message
592 Use the specified tag message when creating the new tag
593 Without the
594 .Fl m
595 option,
596 .Cm got import
597 opens a temporary file in an editor where a tag message can be written.
598 .It Fl r Ar repository-path
599 Use the repository at the specified path.
600 If not specified, assume the repository is located at or above the current
601 working directory.
602 If this directory is a
603 .Nm
604 work tree, use the repository path associated with this work tree.
605 .It Fl l
606 List all existing tags in the repository instead of creating a new tag.
607 If this option is used, no other command-line arguments are allowed.
608 .El
609 .Pp
610 By design, the
611 .Cm got tag
612 command will not delete tags or change existing tags.
613 If a tag must be deleted, the
614 .Cm got ref
615 command may be used to delete a tag's reference.
616 This should only be done if the tag has not already been copied to
617 another repository.
618 .It Cm add Ar file-path ...
619 Schedule unversioned files in a work tree for addition to the
620 repository in the next commit.
621 .It Cm remove Ar file-path ...
622 Remove versioned files from a work tree and schedule them for deletion
623 from the repository in the next commit.
624 .Pp
625 The options for
626 .Cm got remove
627 are as follows:
628 .Bl -tag -width Ds
629 .It Fl f
630 Perform the operation even if a file contains uncommitted modifications.
631 .El
632 .It Cm rm
633 Short alias for
634 .Cm remove .
635 .It Cm revert Oo Fl p Oc Oo Fl F Ar response-script Oc Oo Fl R Oc Ar path ...
636 Revert any uncommitted changes in files at the specified paths.
637 File contents will be overwritten with those contained in the
638 work tree's base commit.
639 There is no way to bring discarded changes back after
640 .Cm got revert !
641 .Pp
642 If a file was added with
643 .Cm got add
644 it will become an unversioned file again.
645 If a file was deleted with
646 .Cm got remove
647 it will be restored.
648 .Pp
649 The options for
650 .Cm got revert
651 are as follows:
652 .Bl -tag -width Ds
653 .It Fl p
654 Instead of reverting all changes in files, interactively select or reject
655 changes to revert based on
656 .Dq y
657 (revert change),
658 .Dq n
659 (keep change), and
660 .Dq q
661 (quit reverting this file) responses.
662 If a file is in modified status, individual patches derived from the
663 modified file content can be reverted.
664 Files in added or deleted status may only be reverted in their entirety.
665 .It Fl F Ar response-script
666 With the
667 .Fl p
668 option, read
669 .Dq y ,
670 .Dq n ,
671 and
672 .Dq q
673 responses line-by-line from the specified
674 .Ar response-script
675 file instead of prompting interactively.
676 .It Fl R
677 Permit recursion into directories.
678 If this option is not specified,
679 .Cm got revert
680 will refuse to run if a specified
681 .Ar path
682 is a directory.
683 .El
684 .It Cm rv
685 Short alias for
686 .Cm revert .
687 .It Cm commit Oo Fl m Ar message Oc Op Ar path ...
688 Create a new commit in the repository from changes in a work tree
689 and use this commit as the new base commit for the work tree.
690 If no
691 .Ar path
692 is specified, commit all changes in the work tree.
693 Otherwise, commit changes at or within the specified paths.
694 .Pp
695 If changes have been explicitly staged for commit with
696 .Cm got stage ,
697 only commit staged changes and reject any specified paths which
698 have not been staged.
699 .Pp
700 Show the status of each affected file, using the following status codes:
701 .Bl -column YXZ description
702 .It M Ta modified file
703 .It D Ta file was deleted
704 .It A Ta new file was added
705 .El
706 .Pp
707 Files which are not part of the new commit will retain their previously
708 recorded base commit.
709 Some
710 .Nm
711 commands may refuse to run while the work tree contains files from
712 multiple base commits.
713 The base commit of such a work tree can be made consistent by running
714 .Cm got update
715 across the entire work tree.
716 .Pp
717 The
718 .Cm got commit
719 command requires the
720 .Ev GOT_AUTHOR
721 environment variable to be set,
722 unless Git's
723 .Dv user.name
724 and
725 .Dv user.email
726 configuration settings can be
727 obtained from the repository's
728 .Pa .git/config
729 file or from Git's global
730 .Pa ~/.gitconfig
731 configuration file.
732 .Pp
733 The options for
734 .Cm got commit
735 are as follows:
736 .Bl -tag -width Ds
737 .It Fl m Ar message
738 Use the specified log message when creating the new commit.
739 Without the
740 .Fl m
741 option,
742 .Cm got commit
743 opens a temporary file in an editor where a log message can be written.
744 .El
745 .Pp
746 .Cm got commit
747 will refuse to run if certain preconditions are not met.
748 If the work tree's current branch is not in the
749 .Dq refs/heads/
750 reference namespace, new commits may not be created on this branch.
751 Local changes may only be committed if they are based on file content
752 found in the most recent commit on the work tree's branch.
753 If a path is found to be out of date,
754 .Cm got update
755 must be used first in order to merge local changes with changes made
756 in the repository.
757 .It Cm ci
758 Short alias for
759 .Cm commit .
760 .It Cm cherrypick Ar commit
761 Merge changes from a single
762 .Ar commit
763 into the work tree.
764 The specified
765 .Ar commit
766 must be on a different branch than the work tree's base commit.
767 The expected argument is a reference or a commit ID SHA1 hash.
768 An abbreviated hash argument will be expanded to a full SHA1 hash
769 automatically, provided the abbreviation is unique.
770 .Pp
771 Show the status of each affected file, using the following status codes:
772 .Bl -column YXZ description
773 .It G Ta file was merged
774 .It C Ta file was merged and conflicts occurred during merge
775 .It ! Ta changes destined for a missing file were not merged
776 .It D Ta file was deleted
777 .It d Ta file's deletion was obstructed by local modifications
778 .It A Ta new file was added
779 .It \(a~ Ta changes destined for a non-regular file were not merged
780 .El
781 .Pp
782 The merged changes will appear as local changes in the work tree, which
783 may be viewed with
784 .Cm got diff ,
785 amended manually or with further
786 .Cm got cherrypick
787 commands,
788 committed with
789 .Cm got commit ,
790 or discarded again with
791 .Cm got revert .
792 .Pp
793 .Cm got cherrypick
794 will refuse to run if certain preconditions are not met.
795 If the work tree contains multiple base commits it must first be updated
796 to a single base commit with
797 .Cm got update .
798 If the work tree already contains files with merge conflicts, these
799 conflicts must be resolved first.
800 .It Cm cy
801 Short alias for
802 .Cm cherrypick .
803 .It Cm backout Ar commit
804 Reverse-merge changes from a single
805 .Ar commit
806 into the work tree.
807 The specified
808 .Ar commit
809 must be on the same branch as the work tree's base commit.
810 The expected argument is a reference or a commit ID SHA1 hash.
811 An abbreviated hash argument will be expanded to a full SHA1 hash
812 automatically, provided the abbreviation is unique.
813 .Pp
814 Show the status of each affected file, using the following status codes:
815 .Bl -column YXZ description
816 .It G Ta file was merged
817 .It C Ta file was merged and conflicts occurred during merge
818 .It ! Ta changes destined for a missing file were not merged
819 .It D Ta file was deleted
820 .It d Ta file's deletion was obstructed by local modifications
821 .It A Ta new file was added
822 .It \(a~ Ta changes destined for a non-regular file were not merged
823 .El
824 .Pp
825 The reverse-merged changes will appear as local changes in the work tree,
826 which may be viewed with
827 .Cm got diff ,
828 amended manually or with further
829 .Cm got backout
830 commands,
831 committed with
832 .Cm got commit ,
833 or discarded again with
834 .Cm got revert .
835 .Pp
836 .Cm got backout
837 will refuse to run if certain preconditions are not met.
838 If the work tree contains multiple base commits it must first be updated
839 to a single base commit with
840 .Cm got update .
841 If the work tree already contains files with merge conflicts, these
842 conflicts must be resolved first.
843 .It Cm bo
844 Short alias for
845 .Cm backout .
846 .It Cm rebase Oo Fl a Oc Oo Fl c Oc Op Ar branch
847 Rebase commits on the specified
848 .Ar branch
849 onto the tip of the current branch of the work tree.
850 The
851 .Ar branch
852 must share common ancestry with the work tree's current branch.
853 Rebasing begins with the first descendant commit of the youngest
854 common ancestor commit shared by the specified
855 .Ar branch
856 and the work tree's current branch, and stops once the tip commit
857 of the specified
858 .Ar branch
859 has been rebased.
860 .Pp
861 Rebased commits are accumulated on a temporary branch which the work tree
862 will remain switched to throughout the entire rebase operation.
863 Commits on this branch represent the same changes with the same log
864 messages as their counterparts on the original
865 .Ar branch ,
866 but with different commit IDs.
867 Once rebasing has completed successfully, the temporary branch becomes
868 the new version of the specified
869 .Ar branch
870 and the work tree is automatically switched to it.
871 .Pp
872 While rebasing commits, show the status of each affected file,
873 using the following status codes:
874 .Bl -column YXZ description
875 .It G Ta file was merged
876 .It C Ta file was merged and conflicts occurred during merge
877 .It ! Ta changes destined for a missing file were not merged
878 .It D Ta file was deleted
879 .It d Ta file's deletion was obstructed by local modifications
880 .It A Ta new file was added
881 .It \(a~ Ta changes destined for a non-regular file were not merged
882 .El
883 .Pp
884 If merge conflicts occur the rebase operation is interrupted and may
885 be continued once conflicts have been resolved.
886 Alternatively, the rebase operation may be aborted which will leave
887 .Ar branch
888 unmodified and the work tree switched back to its original branch.
889 .Pp
890 If a merge conflict is resolved in a way which renders the merged
891 change into a no-op change, the corresponding commit will be elided
892 when the rebase operation continues.
893 .Pp
894 .Cm got rebase
895 will refuse to run if certain preconditions are not met.
896 If the work tree contains multiple base commits it must first be updated
897 to a single base commit with
898 .Cm got update .
899 If changes have been staged with
900 .Cm got stage ,
901 these changes must first be committed with
902 .Cm got commit
903 or unstaged with
904 .Cm got unstage .
905 If the work tree contains local changes, these changes must first be
906 committed with
907 .Cm got commit
908 or reverted with
909 .Cm got revert .
910 If the
911 .Ar branch
912 contains changes to files outside of the work tree's path prefix,
913 the work tree cannot be used to rebase this branch.
914 .Pp
915 The
916 .Cm got update
917 and
918 .Cm got commit
919 commands will refuse to run while a rebase operation is in progress.
920 Other commands which manipulate the work tree may be used for
921 conflict resolution purposes.
922 .Pp
923 The options for
924 .Cm got rebase
925 are as follows:
926 .Bl -tag -width Ds
927 .It Fl a
928 Abort an interrupted rebase operation.
929 If this option is used, no other command-line arguments are allowed.
930 .It Fl c
931 Continue an interrupted rebase operation.
932 If this option is used, no other command-line arguments are allowed.
933 .El
934 .It Cm rb
935 Short alias for
936 .Cm rebase .
937 .It Cm histedit Oo Fl a Oc Oo Fl c Oc Op Fl F Ar histedit-script
938 Edit commit history between the work tree's current base commit and
939 the tip commit of the work tree's current branch.
940 .Pp
941 Editing of commit history is controlled via a
942 .Ar histedit script
943 which can be edited interactively or passed on the command line.
944 The format of the histedit script is line-based.
945 Each line in the script begins with a command name, followed by
946 whitespace and an argument.
947 For most commands, the expected argument is a commit ID SHA1 hash.
948 Any remaining text on the line is ignored.
949 Lines which begin with the
950 .Sq #
951 character are ignored entirely.
952 .Pp
953 The available commands are as follows:
954 .Bl -column YXZ pick-commit
955 .It pick Ar commit Ta Use the specified commit as it is.
956 .It edit Ar commit Ta Use the specified commit but once changes have been
957 merged into the work tree interrupt the histedit operation for amending.
958 .It fold Ar commit Ta Combine the specified commit with the next commit
959 listed further below that will be used.
960 .It drop Ar commit Ta Remove this commit from the edited history.
961 .It mesg Ar log-message Ta Use the specified single-line log message for
962 the commit on the previous line.
963 If the log message argument is left empty, open an editor where a new
964 log message can be written.
965 .El
966 .Pp
967 Every commit in the history being edited must be mentioned in the script.
968 Lines may be re-ordered to change the order of commits in the edited history.
969 .Pp
970 Edited commits are accumulated on a temporary branch which the work tree
971 will remain switched to throughout the entire histedit operation.
972 Once history editing has completed successfully, the temporary branch becomes
973 the new version of the work tree's branch and the work tree is automatically
974 switched to it.
975 .Pp
976 While merging commits, show the status of each affected file,
977 using the following status codes:
978 .Bl -column YXZ description
979 .It G Ta file was merged
980 .It C Ta file was merged and conflicts occurred during merge
981 .It ! Ta changes destined for a missing file were not merged
982 .It D Ta file was deleted
983 .It d Ta file's deletion was obstructed by local modifications
984 .It A Ta new file was added
985 .It \(a~ Ta changes destined for a non-regular file were not merged
986 .El
987 .Pp
988 If merge conflicts occur the histedit operation is interrupted and may
989 be continued once conflicts have been resolved.
990 Alternatively, the histedit operation may be aborted which will leave
991 the work tree switched back to its original branch.
992 .Pp
993 If a merge conflict is resolved in a way which renders the merged
994 change into a no-op change, the corresponding commit will be elided
995 when the histedit operation continues.
996 .Pp
997 .Cm got histedit
998 will refuse to run if certain preconditions are not met.
999 If the work tree's current branch is not in the
1000 .Dq refs/heads/
1001 reference namespace, the history of the branch may not be edited.
1002 If the work tree contains multiple base commits it must first be updated
1003 to a single base commit with
1004 .Cm got update .
1005 If changes have been staged with
1006 .Cm got stage ,
1007 these changes must first be committed with
1008 .Cm got commit
1009 or unstaged with
1010 .Cm got unstage .
1011 If the work tree contains local changes, these changes must first be
1012 committed with
1013 .Cm got commit
1014 or reverted with
1015 .Cm got revert .
1016 If the edited history contains changes to files outside of the work tree's
1017 path prefix, the work tree cannot be used to edit the history of this branch.
1018 .Pp
1019 The
1020 .Cm got update
1021 command will refuse to run while a histedit operation is in progress.
1022 Other commands which manipulate the work tree may be used, and the
1023 .Cm got commit
1024 command may be used to commit arbitrary changes to the temporary branch
1025 while the histedit operation is interrupted.
1026 .Pp
1027 The options for
1028 .Cm got histedit
1029 are as follows:
1030 .Bl -tag -width Ds
1031 .It Fl a
1032 Abort an interrupted histedit operation.
1033 If this option is used, no other command-line arguments are allowed.
1034 .It Fl c
1035 Continue an interrupted histedit operation.
1036 If this option is used, no other command-line arguments are allowed.
1037 .El
1038 .It Cm he
1039 Short alias for
1040 .Cm histedit .
1041 .It Cm stage Oo Fl l Oc Oo Fl p Oc Oo Fl F Ar response-script Oc Op Ar path ...
1042 Stage local changes for inclusion in the next commit.
1043 If no
1044 .Ar path
1045 is specified, stage all changes in the work tree.
1046 Otherwise, stage changes at or within the specified paths.
1047 Paths may be staged if they are added, modified, or deleted according to
1048 .Cm got status .
1049 .Pp
1050 Show the status of each affected file, using the following status codes:
1051 .Bl -column YXZ description
1052 .It A Ta file addition has been staged
1053 .It M Ta file modification has been staged
1054 .It D Ta file deletion has been staged
1055 .El
1056 .Pp
1057 Staged file contents are saved in newly created blob objects in the repository.
1058 These blobs will be referred to by tree objects once staged changes have been
1059 committed.
1060 .Pp
1061 Staged changes affect the behaviour of
1062 .Cm got commit ,
1063 .Cm got status ,
1064 and
1065 .Cm got diff .
1066 While paths with staged changes exist, the
1067 .Cm got commit
1068 command will refuse to commit any paths which do not have staged changes.
1069 Local changes created on top of staged changes can only be committed if
1070 the path is staged again, or if the staged changes are committed first.
1071 The
1072 .Cm got status
1073 command will show both local changes and staged changes.
1074 The
1075 .Cm got diff
1076 command is able to display local changes relative to staged changes,
1077 and to display staged changes relative to the repository.
1078 The
1079 .Cm got revert
1080 command cannot revert staged changes but may be used to revert
1081 local changes created on top of staged changes.
1082 .Pp
1083 The options for
1084 .Cm got stage
1085 are as follows:
1086 .Bl -tag -width Ds
1087 .It Fl l
1088 Instead of staging new changes, list paths which are already staged,
1089 along with the IDs of staged blob objects and stage status codes.
1090 If paths were provided in the command line show the staged paths
1091 among the specified paths.
1092 Otherwise, show all staged paths.
1093 .It Fl p
1094 Instead of staging the entire content of a changed file, interactively
1095 select or reject changes for staging based on
1096 .Dq y
1097 (stage change),
1098 .Dq n
1099 (reject change), and
1100 .Dq q
1101 (quit staging this file) responses.
1102 If a file is in modified status, individual patches derived from the
1103 modified file content can be staged.
1104 Files in added or deleted status may only be staged or rejected in
1105 their entirety.
1106 .It Fl F Ar response-script
1107 With the
1108 .Fl p
1109 option, read
1110 .Dq y ,
1111 .Dq n ,
1112 and
1113 .Dq q
1114 responses line-by-line from the specified
1115 .Ar response-script
1116 file instead of prompting interactively.
1117 .El
1118 .Pp
1119 .Cm got stage
1120 will refuse to run if certain preconditions are not met.
1121 If a file contains merge conflicts, these conflicts must be resolved first.
1122 If a file is found to be out of date relative to the head commit on the
1123 work tree's current branch, the file must be updated with
1124 .Cm got update
1125 before it can be staged (however, this does not prevent the file from
1126 becoming out-of-date at some point after having been staged).
1127 .Pp
1128 The
1129 .Cm got update ,
1130 .Cm got rebase ,
1131 and
1132 .Cm got histedit
1133 commands will refuse to run while staged changes exist.
1134 If staged changes cannot be committed because a staged path
1135 is out of date, the path must be unstaged with
1136 .Cm got unstage
1137 before it can be updated with
1138 .Cm got update ,
1139 and may then be staged again if necessary.
1140 .It Cm sg
1141 Short alias for
1142 .Cm stage .
1143 .It Cm unstage Oo Fl p Oc Oo Fl F Ar response-script Oc Op Ar path ...
1144 Merge staged changes back into the work tree and put affected paths
1145 back into non-staged status.
1146 If no
1147 .Ar path
1148 is specified, unstage all staged changes across the entire work tree.
1149 Otherwise, unstage changes at or within the specified paths.
1150 .Pp
1151 Show the status of each affected file, using the following status codes:
1152 .Bl -column YXZ description
1153 .It G Ta file was unstaged
1154 .It C Ta file was unstaged and conflicts occurred during merge
1155 .It ! Ta changes destined for a missing file were not merged
1156 .It D Ta file was staged as deleted and still is deleted
1157 .It d Ta file's deletion was obstructed by local modifications
1158 .It \(a~ Ta changes destined for a non-regular file were not merged
1159 .El
1160 .Pp
1161 The options for
1162 .Cm got unstage
1163 are as follows:
1164 .Bl -tag -width Ds
1165 .It Fl p
1166 Instead of unstaging the entire content of a changed file, interactively
1167 select or reject changes for unstaging based on
1168 .Dq y
1169 (unstage change),
1170 .Dq n
1171 (keep change staged), and
1172 .Dq q
1173 (quit unstaging this file) responses.
1174 If a file is staged in modified status, individual patches derived from the
1175 staged file content can be unstaged.
1176 Files staged in added or deleted status may only be unstaged in their entirety.
1177 .It Fl F Ar response-script
1178 With the
1179 .Fl p
1180 option, read
1181 .Dq y ,
1182 .Dq n ,
1183 and
1184 .Dq q
1185 responses line-by-line from the specified
1186 .Ar response-script
1187 file instead of prompting interactively.
1188 .El
1189 .It Cm ug
1190 Short alias for
1191 .Cm unstage .
1192 .It Cm cat Oo Fl c Ar commit Oc Oo Fl r Ar repository-path Oc Oo Fl P Oc Ar arg ...
1193 Parse and print contents of objects to standard output in a line-based
1194 text format.
1195 Content of commit, tree, and tag objects is printed in a way similar
1196 to the actual content stored in such objects.
1197 Blob object contents are printed as they would appear in files on disk.
1198 .Pp
1199 Attempt to interpret each argument as a reference, a tag name, or
1200 an object ID SHA1 hash.
1201 References will be resolved to an object ID.
1202 Tag names will resolved to a tag object.
1203 An abbreviated hash argument will be expanded to a full SHA1 hash
1204 automatically, provided the abbreviation is unique.
1205 .Pp
1206 If none of the above interpretations produce a valid result, or if the
1207 .Fl P
1208 option is used, attempt to interpret the argument as a path which will
1209 be resolved to the ID of an object found at this path in the repository.
1210 .Pp
1211 The options for
1212 .Cm got cat
1213 are as follows:
1214 .Bl -tag -width Ds
1215 .It Fl c Ar commit
1216 Look up paths in the specified
1217 .Ar commit .
1218 If this option is not used, paths are looked up in the commit resolved
1219 via the repository's HEAD reference.
1220 The expected argument is a commit ID SHA1 hash or an existing reference
1221 or tag name which will be resolved to a commit ID.
1222 An abbreviated hash argument will be expanded to a full SHA1 hash
1223 automatically, provided the abbreviation is unique.
1224 .It Fl r Ar repository-path
1225 Use the repository at the specified path.
1226 If not specified, assume the repository is located at or above the current
1227 working directory.
1228 If this directory is a
1229 .Nm
1230 work tree, use the repository path associated with this work tree.
1231 .It Fl P
1232 Interpret all arguments as paths only.
1233 This option can be used to resolve ambiguity in cases where paths
1234 look like tag names, reference names, or object IDs.
1235 .El
1236 .El
1237 .Sh ENVIRONMENT
1238 .Bl -tag -width GOT_AUTHOR
1239 .It Ev GOT_AUTHOR
1240 The author's name and email address for
1241 .Cm got commit
1242 and
1243 .Cm got import ,
1244 for example:
1245 .Dq An Flan Hacker Aq Mt flan_hacker@openbsd.org .
1246 Because
1247 .Xr git 1
1248 may fail to parse commits without an email address in author data,
1249 .Nm
1250 attempts to reject
1251 .Ev GOT_AUTHOR
1252 environment variables with a missing email address.
1253 .Pp
1254 If present, Git's
1255 .Dv user.name
1256 and
1257 .Dv user.email
1258 configuration settings in the repository's
1259 .Pa .git/config
1260 file will override the value of
1261 .Ev GOT_AUTHOR .
1262 However, the
1263 .Dv user.name
1264 and
1265 .Dv user.email
1266 configuration settings contained in Git's global
1267 .Pa ~/.gitconfig
1268 configuration file will be used only if the
1269 .Ev GOT_AUTHOR
1270 environment variable is
1271 .Em not
1272 set.
1273 .It Ev VISUAL , EDITOR
1274 The editor spawned by
1275 .Cm got commit ,
1276 .Cm got import ,
1278 .Cm got tag .
1279 .It Ev GOT_LOG_DEFAULT_LIMIT
1280 The default limit on the number of commits traversed by
1281 .Cm got log .
1282 If set to zero, the limit is unbounded.
1283 This variable will be silently ignored if it is set to a non-numeric value.
1284 .El
1285 .Sh EXIT STATUS
1286 .Ex -std got
1287 .Sh EXAMPLES
1288 Clone an existing Git repository for use with
1289 .Nm .
1290 This step currently requires
1291 .Xr git 1 :
1292 .Pp
1293 .Dl $ cd /var/git/
1294 .Dl $ git clone --bare https://github.com/openbsd/src.git
1295 .Pp
1296 Alternatively, for quick and dirty local testing of
1297 .Nm
1298 a new Git repository could be created and populated with files,
1299 e.g. from a temporary CVS checkout located at
1300 .Pa /tmp/src :
1301 .Pp
1302 .Dl $ got init /var/git/src.git
1303 .Dl $ got import -r /var/git/src.git -I CVS -I obj /tmp/src
1304 .Pp
1305 Check out a work tree from the Git repository to /usr/src:
1306 .Pp
1307 .Dl $ got checkout /var/git/src.git /usr/src
1308 .Pp
1309 View local changes in a work tree directory:
1310 .Pp
1311 .Dl $ got status
1312 .Dl $ got diff | less
1313 .Pp
1314 Interactively revert selected local changes in a work tree directory:
1315 .Pp
1316 .Dl $ got revert -p -R\ .
1317 .Pp
1318 In a work tree or a git repository directory, list all branch references:
1319 .Pp
1320 .Dl $ got branch -l
1321 .Pp
1322 In a work tree or a git repository directory, create a new branch called
1323 .Dq unified-buffer-cache
1324 which is forked off the
1325 .Dq master
1326 branch:
1327 .Pp
1328 .Dl $ got branch unified-buffer-cache master
1329 .Pp
1330 Switch an existing work tree to the branch
1331 .Dq unified-buffer-cache .
1332 Local changes in the work tree will be preserved and merged if necessary:
1333 .Pp
1334 .Dl $ got update -b unified-buffer-cache
1335 .Pp
1336 Create a new commit from local changes in a work tree directory.
1337 This new commit will become the head commit of the work tree's current branch:
1338 .Pp
1339 .Dl $ got commit
1340 .Pp
1341 In a work tree or a git repository directory, view changes committed in
1342 the 3 most recent commits to the work tree's branch, or the branch resolved
1343 via the repository's HEAD reference, respectively:
1344 .Pp
1345 .Dl $ got log -p -l 3 -f
1346 .Pp
1347 Add new files and remove obsolete files in a work tree directory:
1348 .Pp
1349 .Dl $ got add sys/uvm/uvm_ubc.c
1350 .Dl $ got remove sys/uvm/uvm_vnode.c
1351 .Pp
1352 Create a new commit from local changes in a work tree directory
1353 with a pre-defined log message.
1354 .Pp
1355 .Dl $ got commit -m 'unify the buffer cache'
1356 .Pp
1357 Update any work tree checked out from the
1358 .Dq unified-buffer-cache
1359 branch to the latest commit on this branch:
1360 .Pp
1361 .Dl $ got update
1362 .Pp
1363 Roll file content on the unified-buffer-cache branch back by one commit,
1364 and then fetch the rolled-back change into the work tree as a local change
1365 to be amended and perhaps committed again:
1366 .Pp
1367 .Dl $ got backout unified-buffer-cache
1368 .Dl $ got commit -m 'roll back previous'
1369 .Dl $ # now back out the previous backout :-)
1370 .Dl $ got backout unified-buffer-cache
1371 .Pp
1372 Fetch new upstream commits into the local repository's master branch.
1373 This step currently requires
1374 .Xr git 1 :
1375 .Pp
1376 .Dl $ cd /var/git/src.git
1377 .Dl $ git fetch origin master:master
1378 .Pp
1379 Rebase the
1380 .Dq unified-buffer-cache
1381 branch on top of the new head commit of the
1382 .Dq master
1383 branch.
1384 .Pp
1385 .Dl $ got update -b master
1386 .Dl $ got rebase unified-buffer-cache
1387 .Pp
1388 Create a patch from all changes on the unified-buffer-cache branch.
1389 The patch can be mailed out for review and applied to
1390 .Ox Ns 's
1391 CVS tree:
1392 .Pp
1393 .Dl $ got diff master unified-buffer-cache > /tmp/ubc.diff
1394 .Pp
1395 Edit the entire commit history of the
1396 .Dq unified-buffer-cache
1397 branch:
1398 .Pp
1399 .Dl $ got update -b unified-buffer-cache
1400 .Dl $ got update -c master
1401 .Dl $ got histedit
1402 .Pp
1403 Additional steps are necessary if local changes need to be pushed back
1404 to the remote repository, which currently requires
1405 .Cm git fetch
1406 and
1407 .Cm git push .
1408 Before working against existing branches in a repository cloned with
1409 .Dq git clone --bare ,
1410 a Git
1411 .Dq refspec
1412 must be configured to map all references in the remote repository
1413 into the
1414 .Dq refs/remotes
1415 namespace of the local repository.
1416 This can achieved by setting Git's
1417 .Pa remote.origin.fetch
1418 configuration variable to the value
1419 .Dq +refs/heads/*:refs/remotes/origin/*
1420 with the
1421 .Cm git config
1422 command:
1423 .Pp
1424 .Dl $ cd /var/git/repo
1425 .Dl $ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
1426 .Pp
1427 Alternatively, the following
1428 .Pa fetch
1429 configuration item can be added manually to the Git repository's
1430 .Pa config
1431 file:
1432 .Pp
1433 .Dl [remote "origin"]
1434 .Dl url = ...
1435 .Dl fetch = +refs/heads/*:refs/remotes/origin/*
1436 .Pp
1437 This configuration leaves the local repository's
1438 .Dq refs/heads
1439 namespace free for use by local branches checked out with
1440 .Cm got checkout
1441 and, if needed, created with
1442 .Cm got branch .
1443 .Pp
1444 Branches in the
1445 .Dq remotes/origin
1446 namespace can be updated with incoming changes from the remote
1447 repository with
1448 .Cm git fetch :
1449 .Pp
1450 .Dl $ cd /var/git/repo
1451 .Dl $ git fetch
1452 .Pp
1453 Before outgoing changes on the local
1454 .Dq master
1455 branch can be pushed to the remote repository, the local
1456 .Dq master
1457 branch must be rebased onto the
1458 .Dq origin/master
1459 branch:
1460 .Pp
1461 .Dl $ got update -b origin/master
1462 .Dl $ got rebase master
1463 .Pp
1464 Changes on the local
1465 .Dq master
1466 branch can then be pushed to the remote
1467 repository with
1468 .Cm git push :
1469 .Pp
1470 .Dl $ cd /var/git/repo
1471 .Dl $ git push origin master
1472 .Sh SEE ALSO
1473 .Xr tog 1 ,
1474 .Xr git-repository 5 ,
1475 .Xr got-worktree 5
1476 .Sh AUTHORS
1477 .An Stefan Sperling Aq Mt stsp@openbsd.org
1478 .An Martin Pieuchot Aq Mt mpi@openbsd.org
1479 .An Joshua Stein Aq Mt jcs@openbsd.org
1480 .Sh CAVEATS
1481 .Nm
1482 is a work-in-progress and many commands remain to be implemented.
1483 At present, the user has to fall back on
1484 .Xr git 1
1485 to perform many tasks, in particular tasks related to repository
1486 administration and tasks which require a network connection.