bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
1 |
.. This file is in Python ReStructuredText format - it can be formatted |
2 |
.. into HTML or text. In the future we plan to extract the example commands |
|
3 |
.. and automatically test them. |
|
4 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
5 |
.. This text was previously on the wiki at |
6 |
.. http://bazaar.canonical.com/IntroductionToBzr but has been moved into the |
|
7 |
.. source tree so it can be kept in sync with |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
8 |
.. the source and possibly automatically checked. |
9 |
||
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
10 |
================== |
11 |
Bazaar-NG Tutorial |
|
12 |
================== |
|
13 |
||
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
14 |
Current for bzr-0.7pre, 2006-01-06. |
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
15 |
|
16 |
||
17 |
Introduction |
|
18 |
============ |
|
19 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
20 |
If you are already familiar with decentralized revision control, then |
21 |
please feel free to skip ahead to "Introducing Yourself to Bazaar-NG". If, |
|
22 |
on the other hand, you are familiar with revision control but not |
|
23 |
decentralized revision control, then please start at "How DRCS is |
|
24 |
different." Otherwise, get some coffee or tea, get comfortable and get |
|
25 |
ready to catch up. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
26 |
|
27 |
The Purposes of Revision Control |
|
28 |
================================ |
|
29 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
30 |
Odds are that you have worked on some sort of textual data -- the sources |
31 |
to a program, web sites or the config files that Unix system administrators |
|
32 |
have to deal with in /etc. The chances are also good that you have made |
|
33 |
some sort of mistake that you deeply regretted. Perhaps you deleted the |
|
34 |
configuration file for your mailserver or perhaps mauled the source code |
|
35 |
for a pet project. Whatever happened, you have just deleted important |
|
36 |
information that you would desperately like to get back. If this has ever |
|
37 |
happened to you, then you are probably ready for Bazaar-NG. |
|
38 |
||
39 |
Revision control systems (which I'll henceforth call RCS) such as Bazaar-NG |
|
40 |
give you the ability to track changes for a directory by turning it into |
|
41 |
something slightly more complicated than a directory that we call a |
|
42 |
**branch**. The branch not only stores how the directory looks right now, |
|
43 |
but also how it looked at various points in the past. Then, when you do |
|
44 |
something you wish you hadn't, you can restore the directory to the way it |
|
45 |
looked at some point in the past. |
|
46 |
||
47 |
Revision control systems give users the ability to save changes to a branch |
|
48 |
by "committing a **revision**". The revision created is essentially a |
|
49 |
summary of the changes that were made since the last time the tree was |
|
50 |
saved. |
|
51 |
||
52 |
These revisions have other uses as well. For example, one can comment |
|
53 |
revisions to record what the recent set of changes meant by providing an |
|
54 |
optional log message. Real life log messages include things like "Fixed the |
|
55 |
web template to close the table" and "Added sftp suppport. Fixes #595" |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
56 |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
57 |
We keep these logs so that if later there is some sort of problem with |
58 |
sftp, we can figure out when the problem probably happened. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
59 |
|
60 |
How DRCS is Different |
|
61 |
--------------------- |
|
62 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
63 |
Many Revision Control Systems (RCS) are stored on servers. If one wants to |
64 |
work on the code stored within an RCS, then one needs to connect to the |
|
65 |
server and "checkout" the code. Doing so gives one a directory in which a |
|
66 |
person can make changes and then commit. The RCS client then connects to |
|
67 |
the RCS server and stores the changes. This method is known as the |
|
68 |
centralized model. |
|
69 |
||
70 |
The centralized model can have some drawbacks. A centralized RCS requires |
|
71 |
that one is able to connect to the server whenever one wants to do version |
|
72 |
control work. This can be a bit of a problem if your server on some other |
|
73 |
machine on the internet and you are not. Or, worse yet, you ''are'' on the |
|
74 |
internet but the server is missing! |
|
75 |
||
76 |
Decentralized Revision Control Systems (which I'll call DRCS after this |
|
77 |
point) deal with this problem by keeping branches on the same machine as |
|
78 |
the client. In Bazaar-NG's case, the branch is kept in the same place as |
|
79 |
the code that is being version controlled. This allows the user to save his |
|
80 |
changes (**commit**) whenever he wants -- even if he is offline. The user |
|
81 |
only needs internet access when he wants to access the changes in someone |
|
82 |
else's branch that are somewhere else. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
83 |
|
84 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
85 |
A common requirement that many people have is the need to keep track of the |
86 |
changes for a directory such as file and subdirectory changes. Performing |
|
87 |
this tracking by hand is a awkward process that over time becomes unwieldy. |
|
88 |
That is, until one considers version control tools such as Bazaar-NG. These |
|
89 |
tools automate the process of storing data by creating a **revision** of |
|
90 |
the directory tree whenever the user asks. |
|
91 |
||
92 |
Revision control software such as Bazaar-NG can do much more than just |
|
93 |
storage and performing undo. For example, with Bazaar-NG developer can |
|
94 |
take the modifications in one branch of software and apply them to another, |
|
95 |
related, branch -- even if those changes exist in a branch owned by |
|
96 |
somebody else. This allows developers to cooperate without giving write |
|
97 |
access to repository. |
|
98 |
||
99 |
Bazaar-NG remembers the ''ancestry'' of a revision: the previous revisions |
|
100 |
that it is based upon. A single revision may have more than one direct |
|
101 |
descendant, each with different changes, representing a divergence in the |
|
102 |
evolution of the tree. By branching, Bazaar-NG allows multiple people to |
|
103 |
cooperate on the evolution of a project, without all needing to work in |
|
104 |
strict lock-step. Branching can be useful even for a single developer. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
105 |
|
106 |
Introducing yourself to Bazaar-NG |
|
107 |
================================= |
|
108 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
109 |
Bazaar-NG installs a single new command, **bzr**. Everything else is a |
110 |
subcommand of this. You can get some help with `bzr help`. There will be |
|
111 |
more in the future. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
112 |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
113 |
One function of a version control system is to keep track of who changed |
114 |
what. In a decentralized system, that requires an identifier for each |
|
115 |
author that is globally unique. Most people already have one of these: an |
|
116 |
email address. Bzr is smart enough to automatically generate an email |
|
117 |
address by looking up your username and hostname. If you don't like the |
|
118 |
guess that Bazaar-NG makes, then three options exist: |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
119 |
|
120 |
1. (**Bazaar-NG 0.6 and later**). Setting the email address in the |
|
121 |
``~/.bazaar/bazaar.conf`` by adding the following lines. Please note that |
|
122 |
``[DEFAULT]`` is case sensitive:: |
|
123 |
||
124 |
[DEFAULT] |
|
125 |
email= Your Name <email@isp.com> |
|
126 |
||
127 |
1. (**Bazaar-NG 0.6 and later**) Override the previous setting on a |
|
128 |
branch by branch basis by creating a branch section in |
|
129 |
``~/.bazaar/branches.conf`` by adding the following lines:: |
|
130 |
||
131 |
[/the/directory/to/the/branch] |
|
132 |
email=Your Name <email@isp.com> |
|
133 |
||
134 |
1. Overriding the two previous options by setting the global environment |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
135 |
variable ``$BZREMAIL`` or ``$EMAIL`` (``$BZREMAIL`` will take precedence) |
136 |
to your full email address. |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
137 |
|
138 |
Creating a branch |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
139 |
================= |
140 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
141 |
History is by default stored in the .bzr directory of the branch. There |
142 |
will be a facility to store it in a separate repository, which may be |
|
143 |
remote. We create a new branch by running **bzr init** in an existing |
|
144 |
directory:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
145 |
|
146 |
% mkdir tutorial |
|
147 |
% cd tutorial |
|
148 |
% ls -a |
|
149 |
./ ../ |
|
150 |
% pwd |
|
151 |
/home/mbp/work/bzr.test/tutorial |
|
152 |
% |
|
153 |
% bzr init |
|
154 |
% ls -aF |
|
155 |
./ ../ .bzr/ |
|
156 |
% |
|
157 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
158 |
As for CVS, there are three classes of file: unknown, ignored, and |
159 |
versioned. The **add** command makes a file versioned: that is, changes to |
|
160 |
it will be recorded by the system:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
161 |
|
162 |
% echo 'hello world' > hello.txt |
|
163 |
% bzr status |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
164 |
unknown: |
165 |
hello.txt |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
166 |
% bzr unknowns |
167 |
hello.txt |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
168 |
% bzr add hello.txt |
169 |
added hello.txt |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
170 |
% bzr unknowns |
171 |
||
172 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
173 |
If you add the wrong file, simply use **bzr remove** to make it unversioned |
174 |
again. This does not delete the working copy. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
175 |
|
176 |
Branch locations |
|
177 |
================ |
|
178 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
179 |
All history is stored in a branch, which is just an on-disk directory |
180 |
containing control files. There is no repository or database as used in |
|
181 |
svn or svk. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
182 |
|
183 |
You'll usually refer to branches on your computer's filesystem just by |
|
184 |
giving the name of the directory containing the branch. bzr also supports |
|
185 |
accessing branches over http, for example:: |
|
186 |
||
187 |
% bzr log http://bazaar-ng.org/bzr/bzr.dev/ |
|
188 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
189 |
By installing bzr plugins you can also access branches over the sftp or |
190 |
rsync protocols. |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
191 |
|
192 |
Reviewing changes |
|
193 |
================= |
|
194 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
195 |
Once you have completed some work, you will want to **commit** it to the |
196 |
version history. It is good to commit fairly often: whenever you get a new |
|
197 |
feature working, fix a bug, or improve some code or documentation. It's |
|
198 |
also a good practice to make sure that the code compiles and passes its |
|
199 |
test suite before committing, to make sure that every revision is a |
|
200 |
known-good state. You can also review your changes, to make sure you're |
|
201 |
committing what you intend to, and as a chance to rethink your work before |
|
202 |
you permanently record it. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
203 |
|
204 |
Two bzr commands are particularly useful here: **status** and **diff**. |
|
205 |
||
206 |
bzr status |
|
207 |
---------- |
|
208 |
||
209 |
The **status** command tells you what changes have been made to the |
|
210 |
working directory since the last revision:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
211 |
|
212 |
% bzr status |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
213 |
modified: |
214 |
foo |
|
215 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
216 |
By default **bzr status** hides "boring" files that are either unchanged or |
217 |
ignored. To see them too, use the --all option. The status command can |
|
218 |
optionally be given the name of some files or directories to check. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
219 |
|
220 |
bzr diff |
|
221 |
-------- |
|
222 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
223 |
The **diff** command shows the full text of changes to all files as a |
224 |
standard unified diff. This can be piped through many programs such as |
|
225 |
''patch'', ''diffstat'', ''filterdiff'' and ''colordiff'':: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
226 |
|
227 |
% bzr diff |
|
228 |
*** added file 'hello.txt' |
|
229 |
--- /dev/null |
|
230 |
+++ hello.txt |
|
231 |
@@ -1,0 +1,1 @@ |
|
232 |
+hello world |
|
233 |
||
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
234 |
|
235 |
With the ''-r'' option, the tree is compared to an earlier revision, or |
|
236 |
the differences between two versions are shown:: |
|
237 |
||
238 |
% bzr diff -r 1000.. # everything since r1000 |
|
239 |
% bzr diff -r 1000..1100 # changes from 1000 to 1100 |
|
240 |
||
241 |
The --diff-options option causes bzr to run the external diff program, |
|
242 |
passing options. For example:: |
|
243 |
||
244 |
% bzr diff --diff-options --side-by-side foo |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
245 |
|
246 |
Committing changes |
|
247 |
================== |
|
248 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
249 |
When the working tree state is satisfactory, it can be **committed** to the |
250 |
branch, creating a new revision holding a snapshot of that state. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
251 |
|
252 |
bzr commit |
|
253 |
---------- |
|
254 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
255 |
The **commit** command takes a message describing the changes in the |
256 |
revision. It also records your userid, the current time and timezone, and |
|
257 |
the inventory and contents of the tree. The commit message is specified by |
|
258 |
the ''-m'' or ''--message'' option. You can enter a multi-line commit |
|
259 |
message; in most shells you can enter this just by leaving the quotes open |
|
260 |
at the end of the line. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
261 |
|
262 |
:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
263 |
|
264 |
% bzr commit -m "added my first file" |
|
265 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
266 |
You can also use the -F option to take the message from a file. Some |
267 |
people like to make notes for a commit message while they work, then review |
|
268 |
the diff to make sure they did what they said they did. (This file can |
|
269 |
also be useful when you pick up your work after a break.) |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
270 |
|
271 |
Message from an editor |
|
272 |
====================== |
|
273 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
274 |
If you use neither the `-m` nor the `-F` option then bzr will open an |
275 |
editor for you to enter a message. The editor to run is controlled by your |
|
276 |
`$EDITOR` environment variable or (Post Bazaar-NG 0.6) email setting in . |
|
277 |
If you quit the editor without making any changes, the commit will be |
|
278 |
cancelled. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
279 |
|
280 |
Selective commit |
|
281 |
---------------- |
|
282 |
||
283 |
If you give file or directory names on the commit command line then only |
|
284 |
the changes to those files will be committed. For example:: |
|
285 |
||
286 |
% bzr commit -m "documentation fix" commit.py |
|
287 |
||
288 |
By default bzr always commits all changes to the tree, even if run from a |
|
289 |
subdirectory. To commit from only the current directory down, use:: |
|
290 |
||
291 |
% bzr commit . |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
292 |
|
293 |
||
294 |
Removing uncommitted changes |
|
295 |
============================ |
|
296 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
297 |
If you've made some changes and don't want to keep them, use the **revert** |
298 |
command to go back to the previous head version. It's a good idea to use |
|
299 |
**bzr diff** first to see what will be removed. By default the revert |
|
300 |
command reverts the whole tree; if file or directory names are given then |
|
301 |
only those ones will be affected. **revert** also clears the list of |
|
302 |
pending merges revisions. |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
303 |
|
304 |
Ignoring files |
|
305 |
============== |
|
306 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
307 |
Many source trees contain some files that do not need to be versioned, such |
308 |
as editor backups, object or bytecode files, and built programs. You can |
|
309 |
simply not add them, but then they'll always crop up as unknown files. You |
|
310 |
can also tell bzr to ignore these files by adding them to a file called |
|
311 |
''.bzrignore'' at the top of the tree. |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
312 |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
313 |
This file contains a list of file wildcards (or "globs"), one per line. |
314 |
Typical contents are like this:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
315 |
|
316 |
*.o |
|
317 |
*~ |
|
318 |
*.tmp |
|
319 |
*.py[co] |
|
320 |
||
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
321 |
If a glob contains a slash, it is matched against the whole path from the |
322 |
top of the tree; otherwise it is matched against only the filename. So |
|
323 |
the previous example ignores files with extension ``.o`` in all |
|
324 |
subdirectories, but this example ignores only config.h at the top level |
|
325 |
and HTML files in ``doc/``:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
326 |
|
327 |
./config.h |
|
328 |
doc/*.html |
|
329 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
330 |
To get a list of which files are ignored and what pattern they matched, use |
331 |
''bzr ignored'':: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
332 |
|
333 |
% bzr ignored |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
334 |
config.h ./config.h |
335 |
configure.in~ *~ |
|
336 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
337 |
It is OK to have either an ignore pattern match a versioned file, or to add |
338 |
an ignored file. Ignore patterns have no effect on versioned files; they |
|
339 |
only determine whether unversioned files are reported as unknown or |
|
340 |
ignored. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
341 |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
342 |
The ''.bzrignore'' file should normally be versioned, so that new copies of |
343 |
the branch see the same patterns:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
344 |
|
345 |
% bzr add .bzrignore |
|
346 |
% bzr commit -m "Add ignore patterns" |
|
347 |
||
348 |
||
349 |
Examining history |
|
350 |
================= |
|
351 |
||
352 |
bzr log |
|
353 |
------- |
|
354 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
355 |
The **bzr log** command shows a list of previous revisions. The **bzr log |
356 |
--forward** command does the same in chronological order to get most recent |
|
357 |
revisions printed at last. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
358 |
|
359 |
As with bzr diff, bzr log supports the -r argument:: |
|
360 |
||
361 |
% bzr log -r 1000.. # Revision 1000 and everything after it |
|
362 |
% bzr log -r ..1000 # Everything up to and including revision % 1000 |
|
363 |
% bzr log -r 1000..1100 # changes from 1000 to 1100 |
|
364 |
% bzr log -r 1000 # The changes in only revision 1000 |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
365 |
|
366 |
||
367 |
Branch statistics |
|
368 |
================= |
|
369 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
370 |
The **bzr info** command shows some summary information about the working |
371 |
tree and the branch history. |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
372 |
|
373 |
||
374 |
Versioning directories |
|
375 |
====================== |
|
376 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
377 |
bzr versions files and directories in a way that can keep track of renames |
378 |
and intelligently merge them:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
379 |
|
380 |
% mkdir src |
|
381 |
% echo 'int main() {}' > src/simple.c
|
|
382 |
% bzr add src |
|
383 |
% bzr status |
|
384 |
A src/ |
|
385 |
? src/simple.c |
|
386 |
% bzr add src/simple.c |
|
387 |
% bzr status |
|
388 |
A src/ |
|
389 |
A src/simple.c |
|
390 |
||
391 |
||
392 |
Deleting and removing files |
|
393 |
=========================== |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
394 |
You can delete files or directories by just deleting them from the working |
395 |
directory. This is a bit different to CVS, which requires that you also do |
|
396 |
**cvs remove**. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
397 |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
398 |
**bzr remove** makes the file un-versioned, but does not delete the working |
399 |
copy. This is useful when you add the wrong file, or decide that a file |
|
400 |
should actually not be versioned. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
401 |
|
402 |
:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
403 |
|
404 |
% rm -r src |
|
405 |
% bzr remove -v hello.txt |
|
406 |
? hello.txt |
|
407 |
% bzr status |
|
408 |
? hello.txt |
|
409 |
D src/ |
|
410 |
D src/simple.c |
|
411 |
||
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
412 |
If you remove the wrong file by accident, you can use **bzr revert** to restore it. |
413 |
||
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
414 |
Branching |
415 |
========= |
|
416 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
417 |
Often rather than starting your own project, you will want to submit a |
418 |
change to an existing project. You can get a copy of an existing branch by |
|
419 |
copying its directory, expanding a tarball, or by a remote copy using |
|
420 |
something like rsync. You can also use bzr to fetch a copy. Because this |
|
421 |
new copy is potentially a new branch, the command is called *branch*:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
422 |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
423 |
% bzr branch http://bazaar-ng.org/bzr/bzr.dev |
|
1185.1.13
by Robert Collins
and the tutorial patch came back, the very next day |
424 |
% cd bzr.dev |
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
425 |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
426 |
This copies down the complete history of this branch, so we can do all |
427 |
operations on it locally: log, annotate, making and merging branches. |
|
428 |
There will be an option to get only part of the history if you wish. |
|
429 |
||
430 |
Checkouts |
|
431 |
========= |
|
432 |
||
433 |
Another thing that gives you files to edit is a checkout. A checkout is |
|
434 |
always associated with another branch. One of the purposes of checkouts is |
|
435 |
to get multiple working trees for a branch. Another reason for checkouts is |
|
436 |
to get access to the files in a branch without keeping a full copy of the |
|
437 |
branch available locally. Getting a checkout looks like this:: |
|
438 |
||
439 |
% bzr checkout http://bazaar-ng.org/bzr/bzr.dev |
|
440 |
% cd bzr.dev |
|
441 |
||
442 |
Checkouts have several advantages and drawbacks. A checkout does not have |
|
443 |
any RCS history as the history is stored in the branch for which a checkout |
|
444 |
is assocated with. This behaviour results in two general rules: |
|
445 |
||
446 |
1. checkouts take much less space than a full branch |
|
447 |
2. checkouts are much faster if the branch is on a local filesystem. |
|
448 |
||
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
449 |
|
450 |
Following upstream changes |
|
451 |
========================== |
|
452 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
453 |
You can stay up-to-date with the parent branch by "pulling" in their changes |
454 |
:: |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
455 |
|
456 |
% bzr pull |
|
457 |
||
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
458 |
After this change, the local directory will be a mirror of the source. |
459 |
||
460 |
This command only works if your local (destination) branch includes only |
|
461 |
changes from the parent branch and no commits of its own. Otherwise, the |
|
462 |
branches are said to have ''diverged'', and they must be merged instead. |
|
463 |
||
464 |
Merging from related branches |
|
465 |
============================= |
|
466 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
467 |
If two branches have diverged (both have unique changes) then **bzr merge** |
468 |
is the appropriate command to use. Merge will automatically calculate the |
|
469 |
changes that exist in the branch you're merging from that are not in your |
|
470 |
branch and attempt to apply them in your branch. :: |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
471 |
|
472 |
% bzr merge URL |
|
473 |
||
474 |
||
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
475 |
Conflicts during merge |
476 |
====================== |
|
477 |
||
478 |
Sometimes two branches modify the same lines in the same files at the same |
|
479 |
time. The result of this collision is called a "conflict". These conflicts |
|
480 |
must be resolved by hand as Bazaar-NG can not tell which change you would |
|
481 |
prefer to keep. You are, however, provided with some information which |
|
482 |
makes the job easier for you to deal with. |
|
483 |
||
484 |
The first thing that Bazaar-NG does is to merge in the parts that it can. |
|
485 |
The parts that can not be merged are put into the file for you to decide |
|
486 |
what to do with. |
|
487 |
||
488 |
The second thing that Bazaar-NG does is to provide you with three extra |
|
489 |
files for each file that is conflicted. The names of these files are the |
|
490 |
same as the original filename with ".BASE", ".THIS" and ".OTHER" appended. |
|
491 |
Each of these files serves a different purpose: |
|
492 |
||
493 |
+------------------+-----------------------------------------------------+ |
|
494 |
| filename.BASE | filename as it looked back when filename was | |
|
495 |
| | identical in both branches. | |
|
496 |
+-----------------+------------------------------------------------------+ |
|
497 |
| filename.THIS | The version of filename for this branch. All of the | |
|
498 |
| | parts of the merge with the other branch that can be | |
|
499 |
| | merged from the other branch without conflicts are | |
|
500 |
| | accepted. The parts which conflict are thrown away | |
|
501 |
+-----------------+------------------------------------------------------+ |
|
502 |
| filename.OTHER | The version of filename for the other branch. All of | |
|
503 |
| | parts of the merge from this branch that can be | |
|
504 |
| | successfully merged are accepted. The parts of the | |
|
505 |
| | merge which conflict are thrown away | |
|
506 |
+-----------------+------------------------------------------------------+ |
|
507 |
||
508 |
||
509 |
For example, imagine that you and another developer were working on on a |
|
510 |
simple branch that only contained hello.c. Both of you agree that saying |
|
511 |
"Yo" to users is a little _too_ informal. Both of you also decide to fix |
|
512 |
the problem at the same time, but take slightly different approaches. You |
|
513 |
decide upon saying "Hi", while your compatriot decides upon a slightly more |
|
514 |
formal "Hello". You both make the respective change and commit. Then, you |
|
515 |
merge his change. The result would look something like this: |
|
516 |
||
517 |
+----------------------+------------------------+ |
|
518 |
| hello.c.THIS | hello.c.THAT | |
|
519 |
+----------------------+------------------------+ |
|
520 |
| | #include <stdio.h> | | #include <stdio.h> | |
|
521 |
| | int | | int | |
|
522 |
| | main() | | main() | |
|
523 |
| | { | | { |
|
|
524 |
| | printf("Hi"); | | printf("Hello"); |
|
|
525 |
| | } | | } | |
|
526 |
| | | |
|
527 |
+----------------------+------------------------+ |
|
528 |
| hello.c.BASE | hello.c | |
|
529 |
+----------------------+------------------------+ |
|
530 |
| | #include <stdio.h> | | #include <stdio.h> | |
|
531 |
| | int | | int | |
|
532 |
| | main() | | main() | |
|
533 |
| | { | | { |
|
|
534 |
| | printf("Yo"); | | <<<<<<< TREE |
|
|
535 |
| | } | | printf("Hi"); |
|
|
536 |
| | | ======= | |
|
537 |
| | | printf("Hello"); |
|
|
538 |
| | | <<<<<<< MERGE-SOURCE | |
|
539 |
| | | } | |
|
540 |
| | | |
|
541 |
+----------------------+------------------------+ |
|
542 |
||
543 |
Your job as a developer is to decide which better. A multitude of options |
|
544 |
exist for how to solve the conflict. Two of them are: |
|
545 |
||
546 |
1. Decide whether you'd like hello.c.THIS, hello.c.THAT or hello.c.BASE. |
|
547 |
Copy that one to hello.c. |
|
548 |
||
549 |
1. edit hello.c and decide which part you wish to keep. Your solution |
|
550 |
will be between the lines that say "<<<<<<< TREE" and "=======". His |
|
551 |
solution will be between "=======" and "<<<<<<< MERGE-SOURCE"). Do not |
|
552 |
forget to delete the markers too! |
|
553 |
||
554 |
Bazaar also tracks which files conflicted during merge to prevent you from |
|
555 |
accidentally committing the conflict markers to your branch. To tell |
|
556 |
Bazaar-NG that you have fixed one of the conflicted files, run:: |
|
557 |
||
558 |
% bzr resolve hello.c |
|
559 |
||
560 |
Using a program such as kdiff3, you can now comfortably merge them into one |
|
561 |
file. To commit you have to rename it to the original basename and delete |
|
562 |
the other two files. As long as there exist files with .BASE, .THIS or |
|
563 |
.OTHER the commit command will complain. |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
564 |
|
565 |
||
566 |
Publishing your branch |
|
567 |
====================== |
|
|
1610.2.1
by James Blackwell
Copied in docs for wiki & First round cleanup |
568 |
|
569 |
You do not need a special server to publish a bzr branch. Generally |
|
570 |
speaking, one can push a branch via sftp to a directory that is served via |
|
571 |
apache. Bazaar-NG supports a variety of methods for reading and writing |
|
572 |
branches. |
|
573 |
||
574 |
Bazaar-NG can push branches via these methods:: |
|
575 |
1. sftp via ssh (the most common) |
|
576 |
2. standard FTP |
|
577 |
3. Any filesystem mounted via remote filesystem tools like NFS and Samba |
|
578 |
4. The Canonical.com branch hosting service (via scoming soon) |
|
579 |
5. Rsync (requires bzrtools plugin from http://bazaar-vcs.org/BzrTools) |
|
580 |
||
581 |
Bazaar-NG can also read branches via a variety of methods:: |
|
582 |
||
583 |
1. Standard http, (E.g. Apache) |
|
584 |
2. rsync |
|
585 |
3. FTP |
|
586 |
3. SFTP |
|
587 |
||
588 |
The most common approach is to push a branch via sftp to a place that is |
|
589 |
served via SFTP. This usually looks something like:: |
|
590 |
||
591 |
* You have a branch in ~/somebranch |
|
592 |
* You have a directory on /home/yourname/public_html on BigServer that |
|
593 |
shows up as http://BigServer/~yourname |
|
594 |
||
595 |
In cases such as this, you'll usually perform the following commands to |
|
596 |
initially push your branch via rsync (which requires the bzrtools plugin):: |
|
597 |
||
598 |
% cd somebranch/ |
|
599 |
% bzr push yourname@BigServer:public_html/somebranch/ |
|
600 |
||
601 |
Other people can then access for your branch by doing the following:: |
|
602 |
||
603 |
% cd anotherbranch/ |
|
604 |
% bzr merge http://BigServer/~yourname/somebranch |
|
|
1536.1.1
by Martin Pool
Move in tutorial text from wiki. |
605 |