##// END OF EJS Templates
subrepo: update help for commit to reflect new default behavior...
David M. Carr -
r15427:2a3ab9e8 stable
parent child Browse files
Show More
@@ -1,134 +1,135 b''
1 Subrepositories let you nest external repositories or projects into a
1 Subrepositories let you nest external repositories or projects into a
2 parent Mercurial repository, and make commands operate on them as a
2 parent Mercurial repository, and make commands operate on them as a
3 group.
3 group.
4
4
5 Mercurial currently supports Mercurial, Git, and Subversion
5 Mercurial currently supports Mercurial, Git, and Subversion
6 subrepositories.
6 subrepositories.
7
7
8 Subrepositories are made of three components:
8 Subrepositories are made of three components:
9
9
10 1. Nested repository checkouts. They can appear anywhere in the
10 1. Nested repository checkouts. They can appear anywhere in the
11 parent working directory.
11 parent working directory.
12
12
13 2. Nested repository references. They are defined in ``.hgsub`` and
13 2. Nested repository references. They are defined in ``.hgsub`` and
14 tell where the subrepository checkouts come from. Mercurial
14 tell where the subrepository checkouts come from. Mercurial
15 subrepositories are referenced like:
15 subrepositories are referenced like:
16
16
17 path/to/nested = https://example.com/nested/repo/path
17 path/to/nested = https://example.com/nested/repo/path
18
18
19 Git and Subversion subrepos are also supported:
19 Git and Subversion subrepos are also supported:
20
20
21 path/to/nested = [git]git://example.com/nested/repo/path
21 path/to/nested = [git]git://example.com/nested/repo/path
22 path/to/nested = [svn]https://example.com/nested/trunk/path
22 path/to/nested = [svn]https://example.com/nested/trunk/path
23
23
24 where ``path/to/nested`` is the checkout location relatively to the
24 where ``path/to/nested`` is the checkout location relatively to the
25 parent Mercurial root, and ``https://example.com/nested/repo/path``
25 parent Mercurial root, and ``https://example.com/nested/repo/path``
26 is the source repository path. The source can also reference a
26 is the source repository path. The source can also reference a
27 filesystem path.
27 filesystem path.
28
28
29 Note that ``.hgsub`` does not exist by default in Mercurial
29 Note that ``.hgsub`` does not exist by default in Mercurial
30 repositories, you have to create and add it to the parent
30 repositories, you have to create and add it to the parent
31 repository before using subrepositories.
31 repository before using subrepositories.
32
32
33 3. Nested repository states. They are defined in ``.hgsubstate`` and
33 3. Nested repository states. They are defined in ``.hgsubstate`` and
34 capture whatever information is required to restore the
34 capture whatever information is required to restore the
35 subrepositories to the state they were committed in a parent
35 subrepositories to the state they were committed in a parent
36 repository changeset. Mercurial automatically record the nested
36 repository changeset. Mercurial automatically record the nested
37 repositories states when committing in the parent repository.
37 repositories states when committing in the parent repository.
38
38
39 .. note::
39 .. note::
40 The ``.hgsubstate`` file should not be edited manually.
40 The ``.hgsubstate`` file should not be edited manually.
41
41
42
42
43 Adding a Subrepository
43 Adding a Subrepository
44 ----------------------
44 ----------------------
45
45
46 If ``.hgsub`` does not exist, create it and add it to the parent
46 If ``.hgsub`` does not exist, create it and add it to the parent
47 repository. Clone or checkout the external projects where you want it
47 repository. Clone or checkout the external projects where you want it
48 to live in the parent repository. Edit ``.hgsub`` and add the
48 to live in the parent repository. Edit ``.hgsub`` and add the
49 subrepository entry as described above. At this point, the
49 subrepository entry as described above. At this point, the
50 subrepository is tracked and the next commit will record its state in
50 subrepository is tracked and the next commit will record its state in
51 ``.hgsubstate`` and bind it to the committed changeset.
51 ``.hgsubstate`` and bind it to the committed changeset.
52
52
53 Synchronizing a Subrepository
53 Synchronizing a Subrepository
54 -----------------------------
54 -----------------------------
55
55
56 Subrepos do not automatically track the latest changeset of their
56 Subrepos do not automatically track the latest changeset of their
57 sources. Instead, they are updated to the changeset that corresponds
57 sources. Instead, they are updated to the changeset that corresponds
58 with the changeset checked out in the top-level changeset. This is so
58 with the changeset checked out in the top-level changeset. This is so
59 developers always get a consistent set of compatible code and
59 developers always get a consistent set of compatible code and
60 libraries when they update.
60 libraries when they update.
61
61
62 Thus, updating subrepos is a manual process. Simply check out target
62 Thus, updating subrepos is a manual process. Simply check out target
63 subrepo at the desired revision, test in the top-level repo, then
63 subrepo at the desired revision, test in the top-level repo, then
64 commit in the parent repository to record the new combination.
64 commit in the parent repository to record the new combination.
65
65
66 Deleting a Subrepository
66 Deleting a Subrepository
67 ------------------------
67 ------------------------
68
68
69 To remove a subrepository from the parent repository, delete its
69 To remove a subrepository from the parent repository, delete its
70 reference from ``.hgsub``, then remove its files.
70 reference from ``.hgsub``, then remove its files.
71
71
72 Interaction with Mercurial Commands
72 Interaction with Mercurial Commands
73 -----------------------------------
73 -----------------------------------
74
74
75 :add: add does not recurse in subrepos unless -S/--subrepos is
75 :add: add does not recurse in subrepos unless -S/--subrepos is
76 specified. Subversion subrepositories are currently silently
76 specified. Subversion subrepositories are currently silently
77 ignored.
77 ignored.
78
78
79 :archive: archive does not recurse in subrepositories unless
79 :archive: archive does not recurse in subrepositories unless
80 -S/--subrepos is specified.
80 -S/--subrepos is specified.
81
81
82 :commit: commit creates a consistent snapshot of the state of the
82 :commit: commit creates a consistent snapshot of the state of the
83 entire project and its subrepositories. It does this by first
83 entire project and its subrepositories. If any subrepositories
84 attempting to commit all modified subrepositories, then recording
84 have been modified, Mercurial will abort. Mercurial can be made
85 their state and finally committing it in the parent
85 to instead commit all modified subrepositories by specifying
86 repository. Mercurial can be made to abort if any subrepository
86 -S/--subrepos, or setting "ui.commitsubrepos=True" in a
87 content is modified by setting "ui.commitsubrepos=no" in a
87 configuration file (see :hg:`help config`). After there are no
88 configuration file (see :hg:`help config`).
88 longer any modified subrepositories, it records their state and
89 finally commits it in the parent repository.
89
90
90 :diff: diff does not recurse in subrepos unless -S/--subrepos is
91 :diff: diff does not recurse in subrepos unless -S/--subrepos is
91 specified. Changes are displayed as usual, on the subrepositories
92 specified. Changes are displayed as usual, on the subrepositories
92 elements. Subversion subrepositories are currently silently
93 elements. Subversion subrepositories are currently silently
93 ignored.
94 ignored.
94
95
95 :incoming: incoming does not recurse in subrepos unless -S/--subrepos
96 :incoming: incoming does not recurse in subrepos unless -S/--subrepos
96 is specified. Subversion subrepositories are currently silently
97 is specified. Subversion subrepositories are currently silently
97 ignored.
98 ignored.
98
99
99 :outgoing: outgoing does not recurse in subrepos unless -S/--subrepos
100 :outgoing: outgoing does not recurse in subrepos unless -S/--subrepos
100 is specified. Subversion subrepositories are currently silently
101 is specified. Subversion subrepositories are currently silently
101 ignored.
102 ignored.
102
103
103 :pull: pull is not recursive since it is not clear what to pull prior
104 :pull: pull is not recursive since it is not clear what to pull prior
104 to running :hg:`update`. Listing and retrieving all
105 to running :hg:`update`. Listing and retrieving all
105 subrepositories changes referenced by the parent repository pulled
106 subrepositories changes referenced by the parent repository pulled
106 changesets is expensive at best, impossible in the Subversion
107 changesets is expensive at best, impossible in the Subversion
107 case.
108 case.
108
109
109 :push: Mercurial will automatically push all subrepositories first
110 :push: Mercurial will automatically push all subrepositories first
110 when the parent repository is being pushed. This ensures new
111 when the parent repository is being pushed. This ensures new
111 subrepository changes are available when referenced by top-level
112 subrepository changes are available when referenced by top-level
112 repositories.
113 repositories.
113
114
114 :status: status does not recurse into subrepositories unless
115 :status: status does not recurse into subrepositories unless
115 -S/--subrepos is specified. Subrepository changes are displayed as
116 -S/--subrepos is specified. Subrepository changes are displayed as
116 regular Mercurial changes on the subrepository
117 regular Mercurial changes on the subrepository
117 elements. Subversion subrepositories are currently silently
118 elements. Subversion subrepositories are currently silently
118 ignored.
119 ignored.
119
120
120 :update: update restores the subrepos in the state they were
121 :update: update restores the subrepos in the state they were
121 originally committed in target changeset. If the recorded
122 originally committed in target changeset. If the recorded
122 changeset is not available in the current subrepository, Mercurial
123 changeset is not available in the current subrepository, Mercurial
123 will pull it in first before updating. This means that updating
124 will pull it in first before updating. This means that updating
124 can require network access when using subrepositories.
125 can require network access when using subrepositories.
125
126
126 Remapping Subrepositories Sources
127 Remapping Subrepositories Sources
127 ---------------------------------
128 ---------------------------------
128
129
129 A subrepository source location may change during a project life,
130 A subrepository source location may change during a project life,
130 invalidating references stored in the parent repository history. To
131 invalidating references stored in the parent repository history. To
131 fix this, rewriting rules can be defined in parent repository ``hgrc``
132 fix this, rewriting rules can be defined in parent repository ``hgrc``
132 file or in Mercurial configuration. See the ``[subpaths]`` section in
133 file or in Mercurial configuration. See the ``[subpaths]`` section in
133 hgrc(5) for more details.
134 hgrc(5) for more details.
134
135
General Comments 0
You need to be logged in to leave comments. Login now