hg clone [OPTION]... SOURCE [DEST]

make a copy of an existing repository

    Create a copy of an existing repository in a new directory.

    If no destination directory name is specified, it defaults to the
    basename of the source.

    The location of the source is added to the new repository's
    ``.hg/hgrc`` file, as the default to be used for future pulls.

    Only local paths and ``ssh://`` URLs are supported as
    destinations. For ``ssh://`` destinations, no working directory or
    ``.hg/hgrc`` will be created on the remote side.

    If the source repository has a bookmark called '@' set, that
    revision will be checked out in the new repository by default.

    To check out a particular version, use -u/--update, or
    -U/--noupdate to create a clone with no working directory.

    To pull only a subset of changesets, specify one or more revisions
    identifiers with -r/--rev or branches with -b/--branch. The
    resulting clone will contain only the specified changesets and
    their ancestors. These options (or 'clone src#rev dest') imply
    --pull, even for local source repositories.

    In normal clone mode, the remote normalizes repository data into a common
    exchange format and the receiving end translates this data into its local
    storage format. --stream activates a different clone mode that essentially
    copies repository files from the remote with minimal data processing. This
    significantly reduces the CPU cost of a clone both remotely and locally.
    However, it often increases the transferred data size by 30-40%. This can
    result in substantially faster clones where I/O throughput is plentiful,
    especially for larger repositories. A side-effect of --stream clones is
    that storage settings and requirements on the remote are applied locally:
    a modern client may inherit legacy or inefficient storage used by the
    remote or a legacy Mercurial client may not be able to clone from a
    modern Mercurial remote.

    .. note::

       Specifying a tag will include the tagged changeset but not the
       changeset containing the tag.

    .. container:: verbose

      For efficiency, hardlinks are used for cloning whenever the
      source and destination are on the same filesystem (note this
      applies only to the repository data, not to the working
      directory). Some filesystems, such as AFS, implement hardlinking
      incorrectly, but do not report errors. In these cases, use the
      --pull option to avoid hardlinking.

      Mercurial will update the working directory to the first applicable
      revision from this list:

      a) null if -U or the source repository has no changesets
      b) if -u . and the source repository is local, the first parent of
         the source repository's working directory
      c) the changeset specified with -u (if a branch name, this means the
         latest head of that branch)
      d) the changeset specified with -r
      e) the tipmost head specified with -b
      f) the tipmost head specified with the url#branch source syntax
      g) the revision marked with the '@' bookmark, if present
      h) the tipmost head of the default branch
      i) tip

      When cloning from servers that support it, Mercurial may fetch
      pre-generated data from a server-advertised URL. When this is done,
      hooks operating on incoming changesets and changegroups may fire twice,
      once for the bundle fetched from the URL and another for any additional
      data not fetched from this URL. In addition, if an error occurs, the
      repository may be rolled back to a partial clone. This behavior may
      change in future releases. See :hg:`help -e clonebundles` for more.


      - clone a remote repository to a new directory named hg/::

          hg clone https://www.mercurial-scm.org/repo/hg/

      - create a lightweight local clone::

          hg clone project/ project-feature/

      - clone from an absolute path on an ssh server (note double-slash)::

          hg clone ssh://user@server//home/projects/alpha/

      - do a streaming clone while checking out a specified version::

          hg clone --stream http://server/repo -u 1.5

      - create a repository without changesets after a particular revision::

          hg clone -r 04e544 experimental/ good/

      - clone (and track) a particular named branch::

          hg clone https://www.mercurial-scm.org/repo/hg/#stable

    See :hg:`help urls` for details on specifying URLs.

    Returns 0 on success.

options ([+] can be repeated):

 == =================== =====================================================================
 -U --noupdate          the clone will include an empty working directory (only a repository)
 -u --updaterev REV     revision, tag, or branch to check out                                
 -r --rev REV [+]       include the specified changeset                                      
 -b --branch BRANCH [+] clone only the specified branch                                      
    --pull              use pull protocol to copy metadata                                   
    --uncompressed      an alias to --stream (DEPRECATED)                                    
    --stream            clone with minimal data processing                                   
 -e --ssh CMD           specify ssh command to use                                           
    --remotecmd CMD     specify hg command to run on the remote side                         
    --insecure          do not verify server certificate (ignoring web.cacerts config)       
 == =================== =====================================================================

global options ([+] can be repeated):

 == =================== ==================================================================
 -R --repository REPO   repository root directory or name of overlay bundle file          
    --cwd DIR           change working directory                                          
 -y --noninteractive    do not prompt, automatically pick the first choice for all prompts
 -q --quiet             suppress output                                                   
 -v --verbose           enable additional output                                          
    --color TYPE        when to colorize (boolean, always, auto, never, or debug)         
    --config CONFIG [+] set/override config option (use 'section.name=value')             
    --debug             enable debugging output                                           
    --debugger          start debugger                                                    
    --encoding ENCODE   set the charset encoding (default: ascii)                         
    --encodingmode MODE set the charset encoding mode (default: strict)                   
    --traceback         always print a traceback on exception                             
    --time              time how long the command takes                                   
    --profile           print command execution profile                                   
    --version           output version information and exit                               
 -h --help              display help and exit                                             
    --hidden            consider hidden changesets                                        
    --pager TYPE        when to paginate (boolean, always, auto, or never) (default: auto)
 == =================== ==================================================================