~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/en/tutorials/tutorial.txt

  • Committer: John Arbash Meinel
  • Date: 2010-02-17 17:11:16 UTC
  • mfrom: (4797.2.17 2.1)
  • mto: (4797.2.18 2.1)
  • mto: This revision was merged to the branch mainline in revision 5055.
  • Revision ID: john@arbash-meinel.com-20100217171116-h7t9223ystbnx5h8
merge bzr.2.1 in preparation for NEWS entry.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
.. into HTML or text.  In the future we plan to extract the example commands
3
3
.. and automatically test them.
4
4
 
5
 
.. This text was previously on the wiki at 
 
5
.. This text was previously on the wiki at
6
6
.. http://bazaar.canonical.com/IntroductionToBzr
7
7
.. but has been moved into the source tree so it can be kept in sync with
8
8
.. the source and possibly automatically checked.
15
15
Introduction
16
16
============
17
17
 
18
 
If you are already familiar with decentralized revision control, then
 
18
If you are already familiar with decentralized version control, then
19
19
please feel free to skip ahead to "Introducing Yourself to Bazaar". If,
20
 
on the other hand, you are familiar with revision control but not
21
 
decentralized revision control, then please start at "How DRCS is
 
20
on the other hand, you are familiar with version control but not
 
21
decentralized version control, then please start at "How DVCS is
22
22
different." Otherwise, get some coffee or tea, get comfortable and get
23
 
ready to catch up. 
 
23
ready to catch up.
24
24
 
25
 
The purpose of revision control
26
 
===============================
 
25
The purpose of version control
 
26
==============================
27
27
 
28
28
Odds are that you have worked on some sort of textual data -- the sources
29
29
to a program, web sites or the config files that Unix system
34
34
important information that you would desperately like to get back. If this
35
35
has ever happened to you, then you are probably ready for Bazaar.
36
36
 
37
 
Revision control systems (which I'll henceforth call RCS) such as
 
37
Version control systems (which I'll henceforth call VCS) such as
38
38
Bazaar give you the ability to track changes for a directory by turning
39
39
it into something slightly more complicated than a directory that we call
40
40
a **branch**. The branch not only stores how the directory looks right
42
42
do something you wish you hadn't, you can restore the directory to the way
43
43
it looked at some point in the past.
44
44
 
45
 
Revision control systems give users the ability to save changes to a
 
45
Version control systems give users the ability to save changes to a
46
46
branch by "committing a **revision**". The revision created is essentially
47
47
a summary of the changes that were made since the last time the tree was
48
 
saved. 
 
48
saved.
49
49
 
50
50
These revisions have other uses as well. For example, one can comment
51
51
revisions to record what the recent set of changes meant by providing an
53
53
the web template to close the table" and "Added sftp suppport. Fixes #595"
54
54
        
55
55
We keep these logs so that if later there is some sort of problem with
56
 
sftp, we can figure out when the problem probably happened. 
 
56
sftp, we can figure out when the problem probably happened.
57
57
 
58
 
How DRCS is different
 
58
How DVCS is different
59
59
=====================
60
60
 
61
 
Many Revision Control Systems (RCS) are stored on servers. If one wants to
62
 
work on the code stored within an RCS, then one needs to connect to the
 
61
Many Version Control Systems (VCS) are stored on servers. If one wants to
 
62
work on the code stored within a VCS, then one needs to connect to the
63
63
server and "checkout" the code. Doing so gives one a directory in which a
64
 
person can make changes and then commit. The RCS client then connects to
65
 
the RCS server and stores the changes. This method is known as the
66
 
centralized model. 
 
64
person can make changes and then commit. The VCS client then connects to
 
65
the VCS server and stores the changes. This method is known as the
 
66
centralized model.
67
67
 
68
 
The centralized model can have some drawbacks. A centralized RCS requires
 
68
The centralized model can have some drawbacks. A centralized VCS requires
69
69
that one is able to connect to the server whenever one wants to do version
70
70
control work. This can be a bit of a problem if your server is on some other
71
71
machine on the internet and you are not. Or, worse yet, you **are** on the
72
72
internet but the server is missing!
73
73
 
74
 
Decentralized Revision Control Systems (which I'll call DRCS after this
 
74
Decentralized Version Control Systems (which I'll call DVCS after this
75
75
point) deal with this problem by keeping branches on the same machine as
76
76
the client. In Bazaar's case, the branch is kept in the same place as
77
77
the code that is being version controlled. This allows the user to save
79
79
user only needs internet access when he wants to access the changes in
80
80
someone else's branch that are somewhere else.
81
81
 
82
 
 
 
82
 
83
83
A common requirement that many people have is the need to keep track of
84
84
the changes for a directory such as file and subdirectory changes.
85
85
Performing this tracking by hand is a awkward process that over time
86
86
becomes unwieldy. That is, until one considers version control tools such
87
87
as Bazaar. These tools automate the process of storing data by creating
88
 
a **revision** of the directory tree whenever the user asks. 
 
88
a **revision** of the directory tree whenever the user asks.
89
89
 
90
 
Revision control software such as Bazaar can do much more than just
 
90
Version control software such as Bazaar can do much more than just
91
91
storage and performing undo.  For example, with Bazaar a developer can
92
92
take the modifications in one branch of software and apply them to a
93
93
related branch -- even if those changes exist in a branch owned by
105
105
==============================
106
106
 
107
107
Bazaar installs a single new command, **bzr**.  Everything else is a
108
 
subcommand of this.  You can get some help with ``bzr help``. Some arguments 
 
108
subcommand of this.  You can get some help with ``bzr help``. Some arguments
109
109
are grouped in topics: ``bzr help topics`` to see which topics are available.
110
110
 
111
111
One function of a version control system is to keep track of who changed
147
147
 
148
148
.. [1] On Windows, the users configuration files can be found in the
149
149
   application data directory. So instead of ``~/.bazaar/branch.conf``
150
 
   the configuration file can be found as: 
 
150
   the configuration file can be found as:
151
151
   ``C:\Documents and Settings\<username>\Application Data\Bazaar\2.0\branch.conf``.
152
152
   The same is true for ``locations.conf``, ``ignore``, and the
153
153
   ``plugins`` directory.
230
230
its test suite before committing, to make sure that every revision is a
231
231
known-good state.  You can also review your changes, to make sure you're
232
232
committing what you intend to, and as a chance to rethink your work before
233
 
you permanently record it. 
 
233
you permanently record it.
234
234
 
235
 
Two bzr commands are particularly useful here: **status** and **diff**.  
 
235
Two bzr commands are particularly useful here: **status** and **diff**.
236
236
 
237
237
bzr status
238
238
----------
277
277
Some projects prefer patches to show a prefix at the start of the path
278
278
for old and new files.  The ``--prefix`` option can be used to provide
279
279
such a prefix.
280
 
As a shortcut, ``bzr diff -p1`` produces a form that works with the 
 
280
As a shortcut, ``bzr diff -p1`` produces a form that works with the
281
281
command ``patch -p1``.
282
282
 
283
283
 
285
285
==================
286
286
 
287
287
When the working tree state is satisfactory, it can be **committed** to
288
 
the branch, creating a new revision holding a snapshot of that state.  
 
288
the branch, creating a new revision holding a snapshot of that state.
289
289
 
290
290
bzr commit
291
291
----------
330
330
commit message when you have finished. If you would like parts to be
331
331
included in the message you can copy and paste them above the separator.
332
332
 
 
333
Marking bugs as fixed
 
334
---------------------
 
335
 
 
336
Many changes to a project are as a result of fixing bugs. Bazaar can keep
 
337
metadata about bugs you fixed when you commit them. To do this you use the
 
338
``--fixes`` option. This option takes an argument that looks like this::
 
339
 
 
340
    % bzr commit --fixes <tracker>:<id>
 
341
 
 
342
Where ``<tracker>`` is an identifier for a bug tracker and ``<id>`` is an
 
343
identifier for a bug that is tracked in that bug tracker. ``<id>`` is usually
 
344
a number. Bazaar already knows about a few popular bug trackers. They are 
 
345
bugs.launchpad.net, bugs.debian.org, and bugzilla.gnome.org. These trackers
 
346
have their own identifiers: lp, deb, and gnome respectively. For example,
 
347
if you made a change to fix the bug #1234 on bugs.launchpad.net, you would
 
348
use the following command to commit your fix::
 
349
 
 
350
    % bzr commit -m "fixed my first bug" --fixes lp:1234
 
351
 
 
352
For more information on this topic or for information on how to configure
 
353
other bug trackers please read `Bug Tracker Settings`_.
 
354
 
 
355
.. _Bug Tracker Settings: ../user-reference/index.html#bug-tracker-settings
 
356
 
333
357
Selective commit
334
358
----------------
335
359
 
403
427
    % bzr commit -m "Add ignore patterns"
404
428
 
405
429
 
 
430
bzr ignore
 
431
----------
 
432
 
 
433
As an alternative to editing the ``.bzrignore`` file, you can use the
 
434
``bzr ignore`` command. The ``bzr ignore`` command takes filenames and/or
 
435
patterns as arguments and then adds them to the ``.bzrignore`` file. If a
 
436
``.bzrignore`` file does not exist the ``bzr ignore`` command will
 
437
automatically create one for you, and implicitly add it to be versioned::
 
438
 
 
439
    % bzr ignore tags
 
440
    % bzr status
 
441
    added:
 
442
      .bzrignore
 
443
 
 
444
Just like when editing the ``.bzrignore`` file on your own, you should
 
445
commit the automatically created ``.bzrignore`` file::
 
446
 
 
447
    % bzr commit -m "Added tags to ignore file"
 
448
 
 
449
 
406
450
Global ignores
407
451
--------------
408
452
 
435
479
=================
436
480
 
437
481
The ``bzr info`` command shows some summary information about the working
438
 
tree and the branch history.  
 
482
tree and the branch history.
439
483
 
440
484
 
441
485
Versioning directories
464
508
 
465
509
``bzr remove`` makes the file un-versioned, but may or may not delete the
466
510
working copy [2]_.  This is useful when you add the wrong file, or decide that
467
 
a file should actually not be versioned. 
 
511
a file should actually not be versioned.
468
512
 
469
513
::
470
514
 
491
535
the existing branch.  Because this new copy is potentially a new branch,
492
536
the command is called **branch**::
493
537
 
494
 
    % bzr branch http://bazaar-vcs.org/bzr/bzr.dev 
 
538
    % bzr branch http://bazaar-vcs.org/bzr/bzr.dev
495
539
    % cd bzr.dev
496
540
 
497
541
This copies down the complete history of this branch, so we can do all
510
554
    % bzr pull
511
555
 
512
556
After this change, the local directory will be a mirror of the source. This
513
 
includes the ''revision-history'' - which is a list of the commits done in 
 
557
includes the ''revision-history'' - which is a list of the commits done in
514
558
this branch, rather than merged from other branches.
515
559
 
516
560
This command only works if your local (destination) branch is either an
564
608
 
565
609
  ::
566
610
 
567
 
    % bzr push sftp://servername.com/path/to/directory 
 
611
    % bzr push sftp://servername.com/path/to/directory
568
612
 
569
613
  (The destination directory must already exist unless the
570
614
  ``--create-prefix`` option is used.)
578
622
  than using ``push``, but may be faster or easier in some situations.
579
623
 
580
624
 
581
 
Moving changes between trees 
 
625
Moving changes between trees
582
626
============================
583
627
 
584
628
It happens to the best of us: sometimes you'll make changes in the wrong