Hey Florian, Comments below. The nitpickier ones aren't so much there to help the proposal as for general information. On 02/04/12 09:30, Florian Achleitner wrote: <snip> > > Subversion (svn) [2] was created as a successor of CVS, both follow a strict > client-server design, where the repository exclusively lives on the central > server and every client only checks out a copy of a single revision at a time. > SVN doesn't truly have a concept of branches. SVN branches are a copy of a > directory (so are tags). Just a little nitpick - SVN was primarily inspired by CVS, but there's no formal connection between the projects - both are developed by different development teams even to this day. <snip> > git-fast-import [4] is a format to serialize a git repository into a text > format. It is used by the tools git-fast-import and git-fast-export. > > The remote helper has to convert the foreign protocol and data (svn) to the > git-fast-import format. As discussed on IRC, I'd like to see some discussion of solutions that use plumbing directly (e.g. git-commit-tree) if you choose to focus on branch import. <snip> > Branches exist due to the convention of having branches/, trunk/, and tags/ > directories in a repository, so do tags. But this is not mandatory and > therefore there are many different layouts. It follows that in svn it is also > possible to commit across branches. This means that a single commit can change > files on more than one branch (accidentally or deliberately). This is basically accurate, but a contrived example might help explain why fully automatic branch export is impossible in the general case: Imagine a repository that consists of a single revision with a single file, "scratchpad/libfoo/foo.c" - how would we decide which directory is the branch? Has the author has even decided yet? For example, he might be learning version control and not understand what branches are. Having said that, automatic branch export might be possible in some important special cases (like repositories that use the standard layout). I haven't really looked into this yet. <snip> > - Because generating the branch mapping configuration already requires that > you have a dump of the svn repo, the helper should probably be able to read > from a file in place of svnrdump too. It might help if I explain how the SVN branch exporter will work: First, it will read an SVN dump and create a file containing JSON blobs summarising each revision - e.g. it specifies which files were changed, but not the contents of the changes. As Ram mentioned, downloading the dump and tee'ing it to both this process and svn-fe makes a lot of sense. Next, it will read the JSON file and detect trunks. This turns out to be extremely fast now it's been freed from the SVN dump format. Next, the user will have the opportunity to review the detected trunks. For example, if somebody put a "README.txt" in the root directory, the previous step will need to be rerun with that file ignored. Next, the main branch detection stage will be run using the JSON file and the previous branch information. Next, the user has another chance to make changes. Some users will blow straight past this stage, but sufficiently fussy users with sufficiently large repositories could spend several days looping through this and the previous stage until their branches and merges are just right. The SBL file is finally complete whenever the user decides - you'll need to tell them how to restart the import process, in case they restarted their computer while they were refining the file. <snip> > 3. Add output capabilities to vcs-svn. Currently the code in vcs-svn can only > convert svn to git. To push to svn we also need conversion and mapping from > git to svn. The actual mapping code for branches should also be placed here > {??} and called by the remote helper. I agree with Jonathan and Ram that we're not ready for this yet. Even mapping git branches back to a branchless representation won't be practical until branch import is fairly mature. - Andrew [1]https://github.com/andrew-sayers/Proof-of-concept-History-Converter/blob/master/git-branch-import.pl [2]git sources git/Documentation/git-commit-tree.txt -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html