PUBLIC-INBOX-CLONE(1)      public-inbox user manual      PUBLIC-INBOX-CLONE(1)

NAME
       public-inbox-clone - "git clone --mirror" wrapper

SYNOPSIS
       public-inbox-clone INBOX_URL [INBOX_DIR]

       public-inbox-clone ROOT_URL [DESTINATION]

DESCRIPTION
       public-inbox-clone is a wrapper around "git clone --mirror" for making
       the initial clone of a remote HTTP(S) public-inbox.  It allows cloning
       multi-epoch v2 inboxes with a single command and zero configuration.

       It does not run public-inbox-init(1) nor public-inbox-index(1).  Those
       commands must be run separately if serving/searching the mirror is
       required.  As-is, public-inbox-clone is suitable for creating a git-
       only backup.

       public-inbox-clone creates a Makefile with handy targets to update the
       inbox once indexed.  This Makefile may be edited by the user; it will
       not be rewritten by public-inbox-fetch(1) unless it is removed
       completely.

       public-inbox-clone does not use nor require any extra configuration
       files (not even "~/.public-inbox/config").

       public-inbox-fetch(1) may be used to keep "INBOX_DIR" up-to-date.

       For v2 inboxes, it will create a "$INBOX_DIR/manifest.js.gz" file to
       speed up subsequent public-inbox-fetch(1).

OPTIONS
       --epoch=RANGE
           Restrict clones of public-inbox-v2-format(5) inboxes to the given
           range of epochs.  The range may be a single non-negative integer or
           a (possibly open-ended) "LOW..HIGH" range of non-negative integers.
           "~" may be prefixed to either (or both) integer values to represent
           the offset from the maximum possible value.

           For example, "--epoch=~0" alone clones only the latest epoch,
           "--epoch=~2.." clones the three latest epochs.

           Default: "0..~0" or 0.. or "..~0" (all epochs, all three examples
           are equivalent)

       -I PATTERN
       --include=PATTERN
           When cloning a top-level with multiple inboxes, only clone inboxes
           and repositories matching a given wildcard pattern (using "*?" and
           "[]" is supported).

       --exclude=PATTERN
           When cloning a top-level with multiple inboxes, ignore inboxes and
           repositories matching the given wildcard pattern.  Supports the
           same wildcards as "--include"

       --inbox-config=always|v2|v1|never
           Whether or not to retrieve the "$INBOX/_/text/config/raw" HTTP(S)
           endpoint when cloning.

           Since we can't deduce v1 inboxes from code repositories, setting
           this to "v2" or "never" can allow faster clones of code
           repositories if no v1 inboxes are present.

           Default: "always"

       --inbox-version=NUM
           Force a remote public-inbox version (must be 1 or 2).  This is
           auto-detected by default, and this option exists mainly for
           testing.

       --objstore=DIR
           Enables space savings when the remote "manifest.js.gz" includes
           "forkgroup" entries as generated by grokmirror 2.x.

           If "DIR" does not start with "/", "./", or "../", it is treated as
           relative to the "DESTINATION" directory.  If only "--objstore=" is
           specified where "DIR" is an empty string (""), then "objstore"
           ("$DESTINATION/objstore") is the implied value of "DIR".

       --manifest=FILE
           When incrementally updating an existing mirror, load the given
           manifest (typically "manifest.js.gz") to speed up updates.

           By default, public-inbox writes the retrieved manifest to
           "$DESTINATION/manifest.js.gz", this directive also changes the
           destination to the specified "FILE"

           If "FILE" does not start with "/", "./", or "../", it is treated as
           relative to the "DESTINATION" directory.  If only "--manifest=" is
           specified where "FILE" is an empty string (""), then
           "manifest.js.gz" ("$DESTINATION/manifest.js.gz") is the implied
           value of "FILE".

       --project-list=FILE
           When cloning code repos from a manifest, generate a cgit-compatible
           project list.

           If "FILE" does not start with "/", "./", or "../", it is treated as
           relative to the "DESTINATION" directory.  If only "--project-list="
           is specified where "FILE" is an empty string (""), then
           "projects.list" ("$DESTINATION/projects.list") is the implied value
           of "FILE".

       --post-update-hook=COMMAND
           Hooks to run after a repository is cloned or updated, "COMMAND"
           will have the bare git repository destination given as its first
           and only argument.

           For v2 inboxes, this operates on a per-epoch basis.

           May be specified multiple times to run multiple commands in the
           order specified on the command-line.

       -p
       --prune
           Pass the "--prune" and "--prune-tags" flags to git-fetch(1) calls
           on incremental clones.

       --exit-code
           Exit with 127 if no updates are done when relying on a manifest.
           Updates include fingerprint mismatches in the manifest, new
           symlinks, new repositories, and removed repositories from the
           --project-list

       -k
       --keep-going
           Continue as much as possible after an error.

       -n
       --dry-run
           Show what would be done, without making any changes.

       -q
       --quiet
           Quiets down progress messages, also passed to git-fetch(1).

       -v
       --verbose
           Increases verbosity, also passed to git-fetch(1).

       --torsocks=auto|no|yes
       --no-torsocks
           Whether to wrap git(1) and curl(1) commands with torsocks(1).

           Default: "auto"

CONTACT
       Feedback welcome via plain-text mail to <mailto:meta@public-inbox.org>

       The mail archives are hosted at <https://public-inbox.org/meta/> and
       <http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/>

COPYRIGHT
       Copyright all contributors <mailto:meta@public-inbox.org>

       License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>

SEE ALSO
       public-inbox-fetch(1), public-inbox-init(1), public-inbox-index(1)

public-inbox.git                  1993-10-02             PUBLIC-INBOX-CLONE(1)