views:

38

answers:

1

I joined a team with greenfield code. When I joined, they did not have a common repository, and they emailed me a tarball of his latest. (yeah, I know...) I've been working off that tarball, making changes and adding files. Now the team has a Mercurial repository (hooray!), and it's been populated with the same code containing more recent changes by other people. In other words, I have the original tarballed code in on directory, my changes in another directory, and an hg clone in a third directory, where the original tarballed code is the common ancestor.

What is a good way to merge my changes into the Mercurial repository? Mercurial has no history of the common ancestor. I am brand new to Mercurial. My VCS experience is with CVS, Perforce, and some SVN. Can I create two more local hg clones and rewrite one with the original code, the other with my changed code, and use Mercurial to merge them somehow? (and if so, how?) Or should I consider using an independant merge tool and then copying the merged version into my clone's directory? Or something else?

This is all on RHE Linux.

Thank you.

+1  A: 

One option to try is something like this:

diff -urN your-original-tarball your-current-code > mychanges.patch
hg clone their-current-repo your-local-clone
cd your-local-clone
hg update -r 0 # go to their oldest item in history
hg import --no-commit ../mychanges.patch
# check it out, test, fix any rejected changes, etc.
hg commit -m 'my changes'  # <-- you'll be warned this creates new heads
hg merge # merge your changes with their changes since they started using mercurial
hg commit -m 'merged my solo work with yours'

That's taking all your work to date, importing it as a new changeset based on the oldest revision they do have, and then merging that work with their work in mercurial since they started using it.

Ideally their r0 would be the tarball they gave you, but one hope's it's not too different.

Ry4an
Thank you for this response; I didn't know you could import a patch like that. It turns out their new code has significant changes from the original tarball, and the directory structure has some changes which confuse my diff tool. I think I will need to use an independent merge utility file-by-file. *sigh*
jasper77
bummer. Mercurial will launch any merge tool you teach it how to launch http://mercurial.selenic.com/wiki/MergeToolConfiguration and you can use 'hg resolve' between the 'hg merge' and 'hg commit' steps to work on it iteratively.
Ry4an