Mercurial > hg > mercurial-crew-with-dirclash
annotate README @ 616:d45d1c90032e
Fix zombie files in merge
# HG changeset patch
# User maf46@burn.cl.cam.ac.uk
# Node ID 57667c9b93a5a743e4629d15a0e6bd76699130c3
# Parent d2994b5298fb20f87dc1d4747635b280db3c0526
Fix zombie files in merge
Keir Fraser observed the following:
> I made a small test case that illustrates the bug in merging changesets
> with 'hg remove's in them:
>
> 1. Create a repository A containing files foo & bar.
> 2. Create clone called B.
> 3. A removes file bar, and commits this removal.
> 4. B edits file foo, and commits this edit.
>
> Now, if B:
> # hg pull ../A; hg update -m; hg commit
> Then bar remains deleted.
>
> If A:
> # hg pull ../B; hg update -m; hg commit
> Then bar is resurrected!
>
> It looks as though, when you merge across a branch, any deletions in
> your own branch are forgotten.
> ...
> Fixing this is a must, as zombie files are a real pain. :-)
Keir later patched our local copy of hg as shown below, which fixes
the problem. I've also enclosed a test which captures the test Keir
outlined...
Files deleted on a branch should not automatically reappear in a merge
Patch notes:
1. The first chunk does not change behaviour, but cleans up the code
to more closely match check of 'force' in the second chunk. I
think it makes the code clearer.
2. The second chunk fixes two bugs --
i. If we choose to keep a remotely-changed locally-deleted file,
then we need to 'get' that file. If we choose to delete it
then no action need be taken (it is already deleted in the
working manifest). Without this fix, choosing to delete would
get a Python traceback.
ii. The test for whether the file was remotely-created is
insufficient. It is only true if f is not in the common
ancestor. Otherwise the file was deleted locally, and should
remain deleted. (this is the most important fix!)
Index: hg/tests/test-merge6
===================================================================
author | maf46@burn.cl.cam.ac.uk |
---|---|
date | Mon, 04 Jul 2005 12:38:34 -0800 |
parents | dd8b19114fe7 |
children | a287f6cd9c6b |
rev | line source |
---|---|
445 | 1 MERCURIAL QUICK-START |
2 | |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
3 Setting up Mercurial: |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
4 |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
5 Note: some distributions fails to include bits of distutils by |
205
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
6 default, you'll need python-dev to install. You'll also need a C |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
7 compiler and a 3-way merge tool like merge, tkdiff, or kdiff3. |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
8 |
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
9 First, unpack the source: |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
10 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
11 $ tar xvzf mercurial-<ver>.tar.gz |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
12 $ cd mercurial-<ver> |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
13 |
205
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
14 To install system-wide: |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
15 |
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
16 $ python setup.py install # change python to python2.3 if 2.2 is default |
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
17 |
205
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
18 To install in your home directory (~/bin and ~/lib, actually), run: |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
19 |
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
20 $ python2.3 setup.py install --home=~ |
507 | 21 $ export PYTHONPATH=${HOME}/lib/python # (or lib64/ on some systems) |
22 $ export PATH=${HOME}/bin:$PATH # add these to your .bashrc | |
205
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
23 |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
24 And finally: |
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
25 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
26 $ hg # test installation, show help |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
27 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
28 If you get complaints about missing modules, you probably haven't set |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
29 PYTHONPATH correctly. |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
30 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
31 Setting up a Mercurial project: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
32 |
445 | 33 $ cd project/ |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
34 $ hg init # creates .hg |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
35 $ hg status # show changes between repo and working dir |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
36 $ hg diff # generate a unidiff |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
37 $ hg addremove # add all unknown files and remove all missing files |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
38 $ hg commit # commit all changes, edit changelog entry |
261 | 39 $ hg export <rev> # export a changeset as a diff |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
40 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
41 Mercurial will look for a file named .hgignore in the root of your |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
42 repository contains a set of regular expressions to ignore in file |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
43 paths. |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
44 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
45 Mercurial commands: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
46 |
445 | 47 $ hg help [command] # get online help |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
48 $ hg history # show changesets |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
49 $ hg log Makefile # show commits per file |
261 | 50 $ hg update # check out the tip revision |
51 $ hg update <id> # check out a specified changeset | |
160 | 52 # IDs can be tags, revision numbers, or unique |
53 # subsets of changeset hash numbers | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
54 $ hg add foo # add a new file for the next commit |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
55 $ hg remove bar # mark a file as removed |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
56 $ hg verify # check repo integrity |
67 | 57 $ hg tags # show current tags |
81
17884f79d59d
Add annotate and blame to the command list and README
mpm@selenic.com
parents:
67
diff
changeset
|
58 $ hg annotate [files] # show changeset numbers for each file line |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
59 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
60 Branching and merging: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
61 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
62 $ cd .. |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
63 $ mkdir linux-work |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
64 $ cd linux-work |
327 | 65 $ hg init ../linux # create a new branch |
261 | 66 $ hg update # populate the working directory |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
67 $ <make changes> |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
68 $ hg commit |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
69 $ cd ../linux |
261 | 70 $ hg pull ../linux-work # pull changesets from linux-work |
445 | 71 $ hg update -m # merge the new tip from linux-work into |
261 | 72 # our working directory |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
73 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
74 Importing patches: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
75 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
76 Fast: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
77 $ patch < ../p/foo.patch |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
78 $ hg addremove |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
79 $ hg commit |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
80 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
81 Faster: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
82 $ patch < ../p/foo.patch |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
83 $ hg commit `lsdiff -p1 ../p/foo.patch` |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
84 |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
85 Fastest: |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
86 $ cat ../p/patchlist | xargs hg import -p1 -b ../p |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
87 |
205
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
88 Exporting a patch: |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
89 |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
90 (make changes) |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
91 $ hg commit |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
92 $ hg tip |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
93 28237:747a537bd090880c29eae861df4d81b245aa0190 |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
94 $ hg export 28237 > foo.patch # export changeset 28237 |
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
95 |
63 | 96 Network support: |
97 | |
445 | 98 # pull from the primary Mercurial repo |
1
273ce12ad8f1
Update README to discuss remote pull, rsync, and the hg repo
mpm@selenic.com
parents:
0
diff
changeset
|
99 foo$ hg init |
261 | 100 foo$ hg pull http://selenic.com/hg/ |
101 foo$ hg update # hg co works too | |
1
273ce12ad8f1
Update README to discuss remote pull, rsync, and the hg repo
mpm@selenic.com
parents:
0
diff
changeset
|
102 |
160 | 103 # export your current repo via HTTP with browsable interface |
104 foo$ hg serve -n "My repo" -p 80 | |
105 | |
327 | 106 # pushing changes to a remote repo with SSH |
107 foo$ hg push ssh://user@example.com/~/hg/ | |
108 | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
109 # merge changes from a remote machine |
261 | 110 bar$ hg pull http://foo/ |
445 | 111 bar$ hg update -m # merge changes into your working directory |
63 | 112 |
160 | 113 # Set up a CGI server on your webserver |
445 | 114 foo$ cp hgweb.cgi ~/public_html/hg/index.cgi |
115 foo$ emacs ~/public_html/hg/index.cgi # adjust the defaults | |
63 | 116 |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
117 Symbolic repository names: |
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
118 |
327 | 119 Mercurial uses an options file called ~/.hgrc. To track locations |
120 symbolically, add a section to it like this: | |
204
161cef501e8d
README: integrate various changes and suggestions from Rafael Villar Burke
mpm@selenic.com
parents:
182
diff
changeset
|
121 |
327 | 122 [paths] |
123 main = http://selenic.com/hg | |
445 | 124 linux = http://www.kernel.org/hg/ |