On Thu, 18 Jun 2009 14:28:13 -0300, Sidnei da Silva wrote: > Hi Wolfgang, > > On Thu, Jun 18, 2009 at 7:31 AM, Wolfgang Schnerring<w...@gocept.com> > wrote: >> * Sebastien Douche <sdou...@gmail.com> [2009-06-18 01:34]: >>> This is a first attempt to build an Mercurial mirror : >>> http://hg.zope.mirrors.securactive.org/ >> >> How did you convert the repository? >> >> I'm asking because I noticed that basically all SVN->DVCS conversion >> tools (hg convert, git-svn, bzr svn-import, svn2bzr, >> svn-fast-export.py, svn-all-fast-export.cpp) do not convert the history >> properly, more precisely, history that happened on branches is lost: >> >> 1. import /trunk/foo.txt >> 2. branch /trunk to /branches/mybranch 3. edit /mybranch/foo.txt >> 4. merge /mybranch to /trunk >> >> If you now ask svn for the history of /trunk/foo.txt (say with 'svn >> log'), you see both steps 3 and 4. After conversion to a DVCS with one >> of the above mentioned tools, you only see step 4, while step 3 never >> happened in the DVCS repository. I think that's unacceptable, most >> importantly because all commit messages that happened on branches are >> lost that way. >> >> Does somebody here know something about this phenomenon, by any chance? >> Am I missing something? > > Here's some context about this from one of the Bazaar developers, John > Arbash Meinel. Hopefully that will solve some of your questions? > > """ > In pretty much all dvcs merging a content exactly back to trunk does not > generate a change message when doing "bzr log foo.txt". > > I'm not really sure what he means by "edit" and then "merge" without a > commit inbetween. So I'm assuming there is one. > > Now, what really matters is whether or not *Subversion* recorded 4 > correctly, such that it can actually see that it was a merge from 3. > > My understanding is that before svn 1.5 that isn't possible. So you are > left with trying to infer that sort of thing from the history. Which > would be possible, but probably expensive. > > I'm pretty sure SVN represents (4) as not a *merge* but as an indentical > commit. > > I don't have a great answer there. Though the fact that Wolfgang says > svn shows both... I suppose because "svn log" shows everything across > all branches? > """
I'm somewhat confused here. According to my understanding: - all DVCS shows, if a merge is done, the changesets that origin from the merged branch. (this is the normal operation) - afaik svn does _not_ show this, what's more, it does not store any metadata about the merges or changesets involved. When doing the merge you really select a diff of the branch by specifying which changesets you want to include back in trunk. This is why it's so important with svn to note in the commit message, which revisions from which branch you merged. Otherwise you would not know at all what has been merged. So although, DVCS could represent the information about the merged changesets, this information will not be imported from SVN, simply, because the information is not represented in SVN. I'd like to add that I'm not using Hg, I am only using bazaar and svn, and I'm talking from what I experienced in practice with working on various svn repos and bzr. It's possible that newer svn does try to attack this problem by storing more metadata with the merges, which then would make sense to be considered at a DVCS import, but I believe that in the vast majority of svn repositories that you would consider importing, this information would not be there anyway, due to the fact that they are product of the older svn version. -- Balazs Ree _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )