Command reference

Generated from the command-line definitions, so it never drifts from the binary.

minato

Overview and sync of Git repositories across hosting providers

Usage: minato [OPTIONS] <COMMAND>

Subcommands:
  • status — Show how local clones stand against what the provider reports
  • clone — Clone repositories that have no local copy
  • fetch — Fetch every local clone. This never touches a working tree
  • update — Fast-forward clones that are strictly behind and clean
  • tui — Browse repositories interactively
  • list — List every repository, with what the provider reports about it
  • sync-fork — Sync forks with their upstream, fast-forward only
  • move — Move one repository into a group, which moves it on disk
  • manifest — Record where clones sit, and restore a tree from that record
  • refresh — Discard cached data so the next run asks the provider again
  • auth — Inspect authentication
  • doctor — Check that configuration and tooling are usable
  • completions — Print a shell completion script, or install one
Options:
  • --json — Emit JSON instead of a table.

    Global because every command answers something, so every command has an answer to serialise.

  • --refresh — Ignore cached data and ask the provider again

minato status

Show how local clones stand against what the provider reports

Usage: minato status [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --group <GROUP> — Keep only repositories in these groups, and in the groups beneath them.

    A group is a directory path beneath a root, written with /, so --group perso keeps perso and everything filed under it, including perso/apps, while --group perso/apps keeps only that bucket.

    A group is where a clone sits, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --state <STATE> — Keep only repositories in these states.

    A state is how a clone stands against the remote, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

    Possible values:

    • not-cloned: Reported by the provider, with no local clone
    • in-sync: Matching the remote exactly
    • ahead: Holding commits the remote does not
    • behind: Missing commits the remote has
    • diverged: Both sides hold commits the other lacks
    • local-only: A clone no reported repository corresponds to
    • incomparable: A clone that cannot be compared
    • drifted: Anything that is not in sync, which is what usually wants attention
  • --include-forks — Include forks, which are hidden by default

  • --include-external — Include clones of repositories owned by nobody you track, which are hidden by default.

    This describes a clone, so only the commands that scan take it: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

minato clone

Clone repositories that have no local copy

Usage: minato clone [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --group <GROUP> — Keep only repositories in these groups, and in the groups beneath them.

    A group is a directory path beneath a root, written with /, so --group perso keeps perso and everything filed under it, including perso/apps, while --group perso/apps keeps only that bucket.

    A group is where a clone sits, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --state <STATE> — Keep only repositories in these states.

    A state is how a clone stands against the remote, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

    Possible values:

    • not-cloned: Reported by the provider, with no local clone
    • in-sync: Matching the remote exactly
    • ahead: Holding commits the remote does not
    • behind: Missing commits the remote has
    • diverged: Both sides hold commits the other lacks
    • local-only: A clone no reported repository corresponds to
    • incomparable: A clone that cannot be compared
    • drifted: Anything that is not in sync, which is what usually wants attention
  • --include-forks — Include forks, which are hidden by default

  • --include-external — Include clones of repositories owned by nobody you track, which are hidden by default.

    This describes a clone, so only the commands that scan take it: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --into <DIRECTORY> — Where to put them. Defaults to the first configured root.

    Where a repository belongs is a judgement its identity does not carry, so it is chosen here rather than derived.

  • --into-group <GROUP> — Put them in this group, which is the directory path that group already occupies beneath a root, such as perso/apps.

    This is not the same as the --group filter, which selects by where a clone already sits. A repository that has not been cloned is in no group, so filtering by one matches nothing.

  • --dry-run — Report what cloning targets, and change nothing

  • --shallow — Clone with a truncated history

minato fetch

Fetch every local clone. This never touches a working tree

Usage: minato fetch [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --group <GROUP> — Keep only repositories in these groups, and in the groups beneath them.

    A group is a directory path beneath a root, written with /, so --group perso keeps perso and everything filed under it, including perso/apps, while --group perso/apps keeps only that bucket.

    A group is where a clone sits, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --state <STATE> — Keep only repositories in these states.

    A state is how a clone stands against the remote, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

    Possible values:

    • not-cloned: Reported by the provider, with no local clone
    • in-sync: Matching the remote exactly
    • ahead: Holding commits the remote does not
    • behind: Missing commits the remote has
    • diverged: Both sides hold commits the other lacks
    • local-only: A clone no reported repository corresponds to
    • incomparable: A clone that cannot be compared
    • drifted: Anything that is not in sync, which is what usually wants attention
  • --include-forks — Include forks, which are hidden by default

  • --include-external — Include clones of repositories owned by nobody you track, which are hidden by default.

    This describes a clone, so only the commands that scan take it: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --dry-run — Report what fetching targets, and change nothing

minato update

Fast-forward clones that are strictly behind and clean

Usage: minato update [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --group <GROUP> — Keep only repositories in these groups, and in the groups beneath them.

    A group is a directory path beneath a root, written with /, so --group perso keeps perso and everything filed under it, including perso/apps, while --group perso/apps keeps only that bucket.

    A group is where a clone sits, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --state <STATE> — Keep only repositories in these states.

    A state is how a clone stands against the remote, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

    Possible values:

    • not-cloned: Reported by the provider, with no local clone
    • in-sync: Matching the remote exactly
    • ahead: Holding commits the remote does not
    • behind: Missing commits the remote has
    • diverged: Both sides hold commits the other lacks
    • local-only: A clone no reported repository corresponds to
    • incomparable: A clone that cannot be compared
    • drifted: Anything that is not in sync, which is what usually wants attention
  • --include-forks — Include forks, which are hidden by default

  • --include-external — Include clones of repositories owned by nobody you track, which are hidden by default.

    This describes a clone, so only the commands that scan take it: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --dry-run — Report what updating targets, and change nothing

minato tui

Browse repositories interactively

Usage: minato tui [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --group <GROUP> — Keep only repositories in these groups, and in the groups beneath them.

    A group is a directory path beneath a root, written with /, so --group perso keeps perso and everything filed under it, including perso/apps, while --group perso/apps keeps only that bucket.

    A group is where a clone sits, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

  • --state <STATE> — Keep only repositories in these states.

    A state is how a clone stands against the remote, so only the commands that scan take this: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

    Possible values:

    • not-cloned: Reported by the provider, with no local clone
    • in-sync: Matching the remote exactly
    • ahead: Holding commits the remote does not
    • behind: Missing commits the remote has
    • diverged: Both sides hold commits the other lacks
    • local-only: A clone no reported repository corresponds to
    • incomparable: A clone that cannot be compared
    • drifted: Anything that is not in sync, which is what usually wants attention
  • --include-forks — Include forks, which are hidden by default

  • --include-external — Include clones of repositories owned by nobody you track, which are hidden by default.

    This describes a clone, so only the commands that scan take it: status, clone, fetch, update, and tui. Anywhere else it is refused rather than ignored.

minato list

List every repository, with what the provider reports about it

Usage: minato list [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --include-forks — Include forks, which are hidden by default

minato sync-fork

Sync forks with their upstream, fast-forward only.

Only a fork strictly behind its upstream is synced, through GitHub’s merge-upstream. A fork holding its own commits is reported and left alone rather than merged, so history is never rewritten.

Usage: minato sync-fork [OPTIONS]

Options:
  • --owner <OWNER> — Keep only repositories owned by these accounts.

    Every command that works on a selection takes this. One that names its subject outright, or touches no repository at all, refuses it rather than ignoring it.

  • --include-forks — Include forks, which are hidden by default

  • --dry-run — Report what syncing targets, and change nothing

minato move

Move one repository into a group, which moves it on disk.

Deliberately one repository at a time: this changes the filesystem, so it is never a side effect of anything else.

Usage: minato move [OPTIONS] --to-group <GROUP> <REPOSITORY>

Arguments:
  • <REPOSITORY> — Which repository, named by identity, owner/name, or bare name
Options:
  • --include-forks — Include forks, which are hidden by default
  • --to-group <GROUP> — The group to move it into, which is a directory path beneath its root, such as perso/apps
  • --dry-run — Report what moving targets, and change nothing

minato manifest

Record where clones sit, and restore a tree from that record.

The record is a .minato.toml file in the root it describes, so the file is the reference: every path in it is relative to the directory holding it, and restoring puts clones back beneath that directory whatever it is called on this machine. Sync the directory however you already sync anything, and the layout travels with it.

Usage: minato manifest <COMMAND>

Subcommands:
  • write — Record every clone found in the tree, creating the manifest if needed
  • apply — Restore the tree: clone what the manifest records and this machine lacks
  • diff — Report how the manifest and the tree on disk disagree
  • forget — Stop recording one repository, without touching its clone

minato manifest write

Record every clone found in the tree, creating the manifest if needed.

Nothing is ever removed: a repository recorded here but absent from this machine is kept, since another machine sharing the file may hold it. Use minato manifest forget to drop one deliberately.

Usage: minato manifest write [OPTIONS] [DIRECTORY]

Arguments:
  • <DIRECTORY> — Which tree, defaulting to the one the current directory sits in
Options:
  • --include-forks — Include forks, which are hidden by default

minato manifest apply

Restore the tree: clone what the manifest records and this machine lacks.

A clone sitting somewhere other than its recorded place is reported and left alone, since it was put there by someone rather than by a manifest. --relocate moves those into the recorded place instead.

Usage: minato manifest apply [OPTIONS] [DIRECTORY]

Arguments:
  • <DIRECTORY> — Which tree, defaulting to the one the current directory sits in
Options:
  • --include-forks — Include forks, which are hidden by default
  • --relocate — Move clones that sit somewhere other than their recorded place
  • --dry-run — Report what restoring targets, and change nothing
  • --shallow — Clone with a truncated history

minato manifest diff

Report how the manifest and the tree on disk disagree

Usage: minato manifest diff [OPTIONS] [DIRECTORY]

Arguments:
  • <DIRECTORY> — Which tree, defaulting to the one the current directory sits in
Options:
  • --include-forks — Include forks, which are hidden by default

minato manifest forget

Stop recording one repository, without touching its clone

Usage: minato manifest forget [OPTIONS] <REPOSITORY> [DIRECTORY]

Arguments:
  • <REPOSITORY> — Which repository, named by identity, owner/name, or bare name
  • <DIRECTORY> — Which tree, defaulting to the one the current directory sits in
Options:
  • --include-forks — Include forks, which are hidden by default

minato refresh

Discard cached data so the next run asks the provider again

Usage: minato refresh [OPTIONS]

Options:
  • --include-forks — Include forks, which are hidden by default

minato auth

Inspect authentication

Usage: minato auth <COMMAND>

Subcommands:
  • status — Report whether a token was found, and where it came from

minato auth status

Report whether a token was found, and where it came from.

The selection sits here rather than on auth, so minato auth status --owner ... is read and then explained rather than rejected as an unknown argument.

Usage: minato auth status [OPTIONS]

Options:
  • --include-forks — Include forks, which are hidden by default

minato doctor

Check that configuration and tooling are usable

Usage: minato doctor [OPTIONS]

Options:
  • --include-forks — Include forks, which are hidden by default

minato completions

Print a shell completion script, or install one.

The script goes to standard output and where to put it goes to standard error, so minato completions zsh > _minato writes the script alone while the instructions still reach the terminal. Run it without redirecting to read them, or see https://m.canouil.dev/minato/shells.html.

--install writes it where the shell reads it instead, and edits the shell’s configuration only where the file alone is not enough. A script already on disk is updated wherever it is, rather than moved.

It is generated from the command definitions, so it cannot describe a command the binary does not have, and it needs regenerating after an upgrade that adds one. minato doctor says when one has gone stale.

Usage: minato completions [OPTIONS] [SHELL]

Arguments:
  • <SHELL> — Which shell to generate for, taken from $SHELL when left out

    Possible values: bash, elvish, fish, powershell, zsh

Options:
  • --include-forks — Include forks, which are hidden by default
  • --install — Write the script where the shell reads it, rather than printing it
  • --uninstall — Remove the installed script, and the managed block that reaches it
  • --dry-run — Report every path that installing targets, and change nothing

This document was generated automatically by clap-markdown.

Back to top