summaryrefslogtreecommitdiff
path: root/Version_Control/vcs1/vcs1.rst
blob: 3121ee31dd6a2ba64cbcea70c5b9e2483e91e7f1 (plain)
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
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308

.. Prerequisites
.. -------------

.. None

.. Author : Primal Pappachan
   Internal Reviewer :
   Date: Sept 23, 2011
--------
Script
--------

.. L1

{{{ Show the first slide containing title, name of the production team along with the logo of MHRD}}}

.. R1

Hello friends and welcome to the tutorial on 'Version Control with Hg' 

.. L2

{{{Show the slide containing the objectives}}}

.. R2

At the end of this tutorial you will be able to

1. Understand what is Version Control and the need for it.

#. Create and use repository on a daily basis

.. R3

First let's understand what Version Control is

.. L3

{{{Show the slide 'what is version control'}}}

.. R4

Version control is just a way to track your files over time and share them. This allows you to go back to older versions when something goes wrong, see what changed when and why, collaborate on a single piece of work with a bunch of people.

Version control is just a way of backing up your files, before making changes to it. Most people would have cooked up their own version control system, without realizing there are tools built by others which takes the task much more organized and systematic.  

.. L4

{{{Show the slide 'Home-brewed'}}}

.. R5

Let's look at an example of home-brew Version Control system

Version control is just a way of backing up your files, before making changes to it. Most people would have cooked up their own version control system, without realizing there are tools built by others which takes the task much more organized and systematic.  

.. L5

{{{Show the slide 'Problems'}}}

Let's look at the various problems associated with this setup.

.. R6

Now let's move onto identifying the needs for a Version Control System.

.. L6

{{{Show the slide 'The need for Version Control'}}}

.. R7

We have seen that one of the main motivation to use a version system control system is the ability to go back to a working version of the file, when something stops working. Below are a few more advantages of using an automated version control system.

1. By tracking the history of the project, an outsider can see the evolution of a project.

#. Allows for effective collaboration on the project as everything is shared.

#. Helps to identify which additions have broken down the project and thus aids in efficient tracking down of the bugs.

#. It is good for a one man show as it is for a big group of people working on a project.


.. L7

{{{Show the slide 'How does it work? - Analogy}}}

.. R8

It is, in some ways, similar to playing a video game. We generally play games in stages, saving the game, each time we finish a stage or complete a task. We continue playing, but we could, if necessary, choose to go back to one of the saved states and start over. In this manner we could change the state of the game.

.. L8

{{{Show the slide 'Mercurial or hg'}}}

.. R9

Some of the Version Control tool available and used widely are:

1. cvs(Concurrent Version Systems)

#. svn(subversion)

#. hg(mercurial)

#. git

.. R10

Each of these tools have their own merits and demerits. In this tutorial we will be learning to use mercurial or hg.

Let's now get into Installation

.. L8

sudo apt-get install mercurial

.. R11

For Windows,

.. L9

http://mercurial.selenic.com/downloads/

Type 'hg' which lists out all the commands 

.. L10

$hg

.. R12

and 'hg version' which gives the version number.

.. L11

$hg version

.. R13

Now why exactly is a repo? A repo/repository is a folder with all your files and a store of all the changes that were made to it. To save disk space, hg doesn't save all files, but only saves only a series of changes made to the files.

.. L13

{{{Show the slide for 'We need a repo!'}}}

.. R14

Let's now see how to initialize a repo

.. L14

cd working-directory/

$hg init

ls -a

.. R15

The .hg directory indicates that our book directory is now a hg repository. Mercurial keeps all the history of the changes made and a few other config files etc. in this directory.

.. L13

$hg status

.. R15

Gives the status of our repo. As a beginner, use it often.

.. L14

$hg help 'status'

.. R16

You can use 'hg help commandname' which gives the details about the command. For example.

.. L15

hg help status

{{{Show the slides for 'Status Codes'}}}

.. R17

Have a look at what various status codes associated with files means. By looking at the codes, it is clear that our files are not yet being tracked by hg. Now Let's move onto Adding Files.

.. L16

$hg status

.. R18

This shows that none of the files in the folder have not been added yet.

.. L17

$hg add

.. R19

This simply adds all the files in the (working) directory, to the repository, As expected, the status command shows an A has been appeneded to the filenames. We could also specify files individually, for example

.. L18

$ hg add filename

.. R20

We have added a set of files to the repository, but we haven't told mercurial to remember these changes. Now let's take a snapshot of this working directory. This can be done by using commit command.

.. L19

$hg commit -u "username <user@domain.com>" -m "Commit message."

.. R20

The -u parameter allows to specify the user details. The parameter -m is used to attach a commit message which gives a description of the changes committed to the repository. Check the status of repository by typing

.. L20

$ hg st

.. R21

To see the history of changes made to our repository, we use hg log. We can view the change that we just made to our repoistory.

.. L21

{{{Show the slide 'Thumbnail views'}}}

.. R21

hg log gives the log of the changes made in the form of changesets. A changeset is a set of changes made to the repository between two consecutive commits. It also shows the date at which the commit was made.


.. R22

User information is set in the hgrc file. It can be either globally or locally to the project.

For linux systems
.. L23

cat ~/.hgrc 
[ui]
username = username <user@domain.com>
editor = vim


.. R23


We have now set the username details for mercurial to use.

.. L24

{{{Show the slide 'Advice: commits, messages'}}} 

.. R24

1. Atomic changes; one change with one commit

#. Single line summary — 60 to 65 characters long

#. Followed by paragraphs of detailed description
 -  Why the change?
 - What does it effect?
 - Known bugs/issues?
 - etc.

.. L25

{{{Show the 'summary' slide'}}}

.. R25

This brings us to the end of the tutorial. In this tutorial, we have
learnt to,

.. L26

{{{Show self assessment questions slide}}}

.. R26

Here are some self assessment questions for you to solve

.. L27

{{{Show the solutions slide to self assessment questions }}}

.. R27

And the answers,


.. L27

{{{Show the thank you slide}}}

.. R28

Hope you have enjoyed this tutorial and found it useful.
Thank you