Kiln » TortoiseHg » TortoiseHg
Clone URL:  
quick.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
****************************** A quick tour for the impatient ****************************** .. module:: tour :synopsis: A Gentle Introduction to Using TortoiseHg on Windows Mercurial supports many different `collaboration models <http://hgbook.red-bean.com/read/collaborating-with-other-people.html>`_. This chapter describes just one of those models: a single central repository. The central repository model does not scale as well as other models, but it is the most familiar to those coming from other revision tools and thus is the most common approach people start with. To get started, suppose you volunteer to create the central repository. There are ways to `convert <http://mercurial.selenic.com/wiki/RepositoryConversion>`_ non-Mercurial repositories into Mercurial repositories, but for this example lets assume we're starting from scratch. The rest of this tutorial assumes you already have TortoiseHg properly installed, and you have your project folder open in your file browser. Configuring TortoiseHg ====================== First you need to make sure that you are correctly identified in TortoiseHg. You do this by adjusting the global settings of TortoiseHg. Right click in your source folder and select :menuselection:`TortoiseHg --> Global Settings` .. figure:: figures/contextmenu.png :alt: Context Menu You must then select the :guilabel:`Commit` tab and enter a name in the :guilabel:`Username` field. .. note:: If you forget to configure your username TortoiseHg will ask you to enter one when you *commit*, the only time the name is actually required. .. note:: There are no hard rules on how to format your user name, the field is free form, but the following convention is commonly used:: FullName <email> for example :: Donald Duck <donaldduck@example.net> The email address is stripped when viewing history in the changelog viewer, and the built-in web server obfuscates email addresses to prevent SPAM. Initialize the repository ========================= Create the initial repository on your local machine by using the :guilabel:`Create Repository Here` shell menu option, or in a command shell within the folder, type :command:`hgtk init`. You only need to do this in once in the root folder of your project. .. figure:: figures/init.png :alt: Init dialog We suggest you keep :guilabel:`Add special files (.hgignore, ...)` checked, and do not check :guilabel:`Make repo compatible with Mercurial 1.0` unless you have a strong reason to do so. After pressing :guilabel:`Create`, Mercurial creates a subdirectory in your project folder named :file:`.hg`. This is where Mercurial keeps all its version data. It is called the *repository* or *store*, while the directory containing the source files is called the *working directory*. You never need to specify the :file:`.hg` directory when running commands, you only need to specify the working directory root. It is mentioned here just so you better understand how Mercurial works. .. warning:: It is dangerous to manually edit the files in :file:`.hg` directory, repository corruption can happen. :file:`.hg/hgrc` is perhaps the only exception to this rule. Add files ========= Now it's time to tell Mercurial which files must be tracked and which files must be ignored. There are a lot of way to do this: 1. To add files, select them in explorer and then right click and select :menuselection:`TortoiseHg --> Add Files` in the context menu. In this way the adding action happens immediately and no TortoiseHg dialogs appear, but you will see the overlay icons change to indicate added files. 2. Or open the status tool (:menuselection:`TortoiseHg --> View File Status` or :command:`hgtk status` from the command line). Check the files you want to add and then press the :guilabel:`Add` button. From the status tool you can launch the ignore filter tool from the context menu of a unknown file (the menu option is named :guilabel:`ignore`) 3. Or skip adding new files as a separate step and have the commit tool add them implicitly. The commit tool is very similar to the status tool and allows you to do all of the same tasks. In this tool you can add and commit an untracked file by just checking the file and pressing :guilabel:`Commit`. 4. To ignore files, open the ignore filter dialog: :menuselection:`TortoiseHg --> Edit Ignore Filter` or from command line :command:`hgtk hgignore`. Choose a file from the list or manually type in a *Glob* or *Regular expression* filter and then press :guilabel:`Add`. Changes to the ignore filter take effect immediately. .. note:: The :file:`.hgignore` file, contained in the working directory root, is typically tracked (checked in). .. note:: It is good practice to not have many *unknown* files in your working directory, as it makes it too easy to forget to add vital new files. So it is recommended that your keep the :file:`.hgignore` file updated. Commit ====== Commit your local repository by right-clicking anywhere in the folder, or on the folder itself, and then selecting :guilabel:`HG Commit ...`, or from command line type :command:`hgtk commit`. Write a commit message, select the files you wish to commit, then press :guilabel:`Commit`. If, after the commit, you realize that something was wrong with the message or the selected files, you can cancel the last commit using the :guilabel:`Undo` button. Your previous commit message will be in the message history drop-down, so you do not have to type it in again from scratch. .. note:: You lose the ability to easily undo the last commit when you close the commit tool. .. figure:: figures/commit.png :alt: Commit dialog Share the repository ==================== Now you are ready to share your work. You do this by making a copy of your repository in a public place that everyone in your group can access. Mercurial calls this *cloning your repository*. To clone your repository to a common area, such as a shared drive or web site which will be the merge point for the team. From the shared drive select :menuselection:`TortoiseHg --> Clone a Repository`, or :command:`hgtk clone` from command line. .. figure:: figures/share.png :alt: Clone dialog When you create a clone for the purposes of generating a *central repository* there is no reason for that clone to have a working directory. Checking :guilabel:`do not update the new working directory` will prevent Mercurial from checking out a working copy of the repository in the central repository clone. It will only have the :file:`.hg` directory, which stores the entire revision history of the project. Other team members can then work from this clone. Fetching from the group repository ================================== You want to start collaborating with your team. They tell you something like *fetch the repository from x*. What does that mean? It means that you want to make a copy of the repository located at x on your local machine. Mercurial calls this cloning and TortiseHg has a dialog for it. Right click in the directory where you want your copy and select :menuselection:`TortoiseHg --> Clone a Repository`, or :command:`hgtk clone` from command line. .. figure:: figures/clone.png :alt: Clone dialog This time you do want to update the working directory because you want to work on the project, uncheck :guilabel:`do not update the new working directory` so Mercurial updates the working directory with the *tip* revision in your new clone. Working with your repository ============================ Suppose you've introduced some changes. It is easy to see that there are a couple of directories with changes pending. You can traverse the directories to find specific changes and commit them from Explorer. A quicker way is to use the commit tool: .. {{images/image001.png}} The commit tool gives you a way to see differences or you can use your visual difference tool (kdiff). Mercurial allows you to commit many changes before you decide to synchronize (share changes) with the group repository. When you're ready to publish your changes, you 1. Commit your changes to your local repository, if you haven't already (see above). 2. Pull changes from the group repository into your repository, :menuselection:`TortoiseHg --> Synchronize` or :command:`hgtk synch`, choose the path to the group repository and then :guilabel:`Pull`. 3. If some changesets were pulled, merge those changes with your local changes and then commit the merge into your local repository. From the changelog viewer (:menuselection:`TortoiseHg --> View Changelog` or :command:`hgtk log`) open the context menu over the changeset which you want to merge and select :guilabel:`merge with`. Finally, in the merge dialog, press :guilabel:`Merge` and then :guilabel:`Commit`. 4. Ensure your merged work still builds and passes your extensive test suite. 5. Push your changes to the group repository, :menuselection:`TortoiseHg --> Synchronize` or :command:`hgtk synch`, choose the path to group repository and then :guilabel:`Push`. Which may sound complicated, but most of the time it is just pushing the buttons in the synchronize tool. .. note:: Merges can be safely restarted if necessary. .. figure:: figures/synchronize.png :alt: Synchronize dialog Mercurial makes collaboration easy, fast, and productive. Learn more at Mercurial's `wiki <http://mercurial.selenic.com/wiki/>`_. .. vim: noet ts=4