mercurial/help/subrepos.txt
author David M. Carr <david@carrclan.us>
Wed, 09 Nov 2011 19:46:51 -0500
changeset 15474 95174c381525
parent 15432 2ddae301d0a2
child 16503 c27a769d9703
permissions -rw-r--r--
forget: support forgetting explicit paths in subrepos Change the behavior of the forget command such that explicit paths in subrepos are handled by forgetting the file in the subrepo. This eliminates the previous behavior where if you called "hg forget" for an explicit path in a subrepo, it would state that the file is already untracked.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     1
Subrepositories let you nest external repositories or projects into a
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     2
parent Mercurial repository, and make commands operate on them as a
15213
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
     3
group.
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
     4
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
     5
Mercurial currently supports Mercurial, Git, and Subversion
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
     6
subrepositories.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     7
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     8
Subrepositories are made of three components:
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     9
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    10
1. Nested repository checkouts. They can appear anywhere in the
15213
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    11
   parent working directory.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    12
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    13
2. Nested repository references. They are defined in ``.hgsub`` and
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    14
   tell where the subrepository checkouts come from. Mercurial
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    15
   subrepositories are referenced like:
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    16
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    17
     path/to/nested = https://example.com/nested/repo/path
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    18
15213
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    19
   Git and Subversion subrepos are also supported:
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    20
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    21
     path/to/nested = [git]git://example.com/nested/repo/path
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    22
     path/to/nested = [svn]https://example.com/nested/trunk/path
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    23
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    24
   where ``path/to/nested`` is the checkout location relatively to the
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    25
   parent Mercurial root, and ``https://example.com/nested/repo/path``
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    26
   is the source repository path. The source can also reference a
15213
15f15f3b405d subrepo: add git to the help topic
Matt Mackall <mpm@selenic.com>
parents: 13411
diff changeset
    27
   filesystem path.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    28
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    29
   Note that ``.hgsub`` does not exist by default in Mercurial
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    30
   repositories, you have to create and add it to the parent
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    31
   repository before using subrepositories.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    32
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    33
3. Nested repository states. They are defined in ``.hgsubstate`` and
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    34
   capture whatever information is required to restore the
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    35
   subrepositories to the state they were committed in a parent
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    36
   repository changeset. Mercurial automatically record the nested
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    37
   repositories states when committing in the parent repository.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    38
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    39
   .. note::
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    40
      The ``.hgsubstate`` file should not be edited manually.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    41
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    42
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    43
Adding a Subrepository
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    44
----------------------
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    45
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    46
If ``.hgsub`` does not exist, create it and add it to the parent
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    47
repository. Clone or checkout the external projects where you want it
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    48
to live in the parent repository. Edit ``.hgsub`` and add the
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    49
subrepository entry as described above. At this point, the
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    50
subrepository is tracked and the next commit will record its state in
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    51
``.hgsubstate`` and bind it to the committed changeset.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    52
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    53
Synchronizing a Subrepository
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    54
-----------------------------
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    55
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    56
Subrepos do not automatically track the latest changeset of their
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    57
sources. Instead, they are updated to the changeset that corresponds
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    58
with the changeset checked out in the top-level changeset. This is so
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    59
developers always get a consistent set of compatible code and
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    60
libraries when they update.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    61
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    62
Thus, updating subrepos is a manual process. Simply check out target
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    63
subrepo at the desired revision, test in the top-level repo, then
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    64
commit in the parent repository to record the new combination.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    65
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    66
Deleting a Subrepository
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    67
------------------------
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    68
12860
db2ff771204d help: correct tip about deleting a subrepository
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12828
diff changeset
    69
To remove a subrepository from the parent repository, delete its
db2ff771204d help: correct tip about deleting a subrepository
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12828
diff changeset
    70
reference from ``.hgsub``, then remove its files.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    71
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    72
Interaction with Mercurial Commands
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    73
-----------------------------------
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    74
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    75
:add: add does not recurse in subrepos unless -S/--subrepos is
15410
9e99d2bbb1b1 add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    76
    specified.  However, if you specify the full path of a file in a
9e99d2bbb1b1 add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    77
    subrepo, it will be added even without -S/--subrepos specified.
15432
2ddae301d0a2 merge with stable
Martin Geisler <mg@aragost.com>
parents: 15410 15429
diff changeset
    78
    Git and Subversion subrepositories are currently silently
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    79
    ignored.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    80
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    81
:archive: archive does not recurse in subrepositories unless
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    82
    -S/--subrepos is specified.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    83
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    84
:commit: commit creates a consistent snapshot of the state of the
15427
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    85
    entire project and its subrepositories. If any subrepositories
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    86
    have been modified, Mercurial will abort.  Mercurial can be made
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    87
    to instead commit all modified subrepositories by specifying
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    88
    -S/--subrepos, or setting "ui.commitsubrepos=True" in a
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    89
    configuration file (see :hg:`help config`).  After there are no
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    90
    longer any modified subrepositories, it records their state and
2a3ab9e81a3e subrepo: update help for commit to reflect new default behavior
David M. Carr <david@carrclan.us>
parents: 15213
diff changeset
    91
    finally commits it in the parent repository.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    92
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    93
:diff: diff does not recurse in subrepos unless -S/--subrepos is
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    94
    specified. Changes are displayed as usual, on the subrepositories
15428
da81da6caa6b subrepo: improve help for git subrepo support
David M. Carr <david@carrclan.us>
parents: 15427
diff changeset
    95
    elements. Git and Subversion subrepositories are currently
da81da6caa6b subrepo: improve help for git subrepo support
David M. Carr <david@carrclan.us>
parents: 15427
diff changeset
    96
    silently ignored.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    97
15474
95174c381525 forget: support forgetting explicit paths in subrepos
David M. Carr <david@carrclan.us>
parents: 15432
diff changeset
    98
:forget: forget currently only handles exact file matches in subrepos.
95174c381525 forget: support forgetting explicit paths in subrepos
David M. Carr <david@carrclan.us>
parents: 15432
diff changeset
    99
    Git and Subversion subrepositories are currently silently ignored.
95174c381525 forget: support forgetting explicit paths in subrepos
David M. Carr <david@carrclan.us>
parents: 15432
diff changeset
   100
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   101
:incoming: incoming does not recurse in subrepos unless -S/--subrepos
15428
da81da6caa6b subrepo: improve help for git subrepo support
David M. Carr <david@carrclan.us>
parents: 15427
diff changeset
   102
    is specified. Git and Subversion subrepositories are currently
da81da6caa6b subrepo: improve help for git subrepo support
David M. Carr <david@carrclan.us>
parents: 15427
diff changeset
   103
    silently ignored.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   104
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   105
:outgoing: outgoing does not recurse in subrepos unless -S/--subrepos
15428
da81da6caa6b subrepo: improve help for git subrepo support
David M. Carr <david@carrclan.us>
parents: 15427
diff changeset
   106
    is specified. Git and Subversion subrepositories are currently
da81da6caa6b subrepo: improve help for git subrepo support
David M. Carr <david@carrclan.us>
parents: 15427
diff changeset
   107
    silently ignored.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   108
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   109
:pull: pull is not recursive since it is not clear what to pull prior
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   110
    to running :hg:`update`. Listing and retrieving all
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   111
    subrepositories changes referenced by the parent repository pulled
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   112
    changesets is expensive at best, impossible in the Subversion
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   113
    case.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   114
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   115
:push: Mercurial will automatically push all subrepositories first
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   116
    when the parent repository is being pushed. This ensures new
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   117
    subrepository changes are available when referenced by top-level
15429
e48f0913f018 subrepo: improve help for svn subrepo support
David M. Carr <david@carrclan.us>
parents: 15428
diff changeset
   118
    repositories.  Push is a no-op for Subversion subrepositories.
12828
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   119
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   120
:status: status does not recurse into subrepositories unless
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   121
    -S/--subrepos is specified. Subrepository changes are displayed as
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   122
    regular Mercurial changes on the subrepository
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   123
    elements. Subversion subrepositories are currently silently
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   124
    ignored.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   125
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   126
:update: update restores the subrepos in the state they were
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   127
    originally committed in target changeset. If the recorded
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   128
    changeset is not available in the current subrepository, Mercurial
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   129
    will pull it in first before updating.  This means that updating
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   130
    can require network access when using subrepositories.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   131
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   132
Remapping Subrepositories Sources
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   133
---------------------------------
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   134
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   135
A subrepository source location may change during a project life,
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   136
invalidating references stored in the parent repository history. To
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   137
fix this, rewriting rules can be defined in parent repository ``hgrc``
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   138
file or in Mercurial configuration. See the ``[subpaths]`` section in
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   139
hgrc(5) for more details.
af1006d2f970 Add subrepos help topic
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
   140