Structure of the xserver-test git repository

Keith Packard keithp at
Sat Apr 1 23:33:55 PST 2006

Nick Riviera was poking at the xserver-test repository and found a
curious thing; many branches start with a commit that removes dozens or
hundreds of files. He was naturally concerned that this represented a
bug in the import tool. I thought I might explain what's going on.

The current CVS repository has a strange history, as many CVS
repositories do. The limitations of CVS force us to work around it in
various ways.

In this particular case, ajax wanted to move my kdrive DDX trees into
the repository without losing the development history of those
files. As CVS has no ability to record repository merges that retain
history, he did this by simply copying the ,v files from the xserver
repository into the repository.

The effect is to create a semi-unified repository. Shared elements, like
the trunk, are joined together. Separate elements, like branches unique
to one or the other original repository, cannot be joined. CVS places
tags in each individual ,v file (which is why a tag operation takes so
long). When you check out a specific tag, files which don't contain that
tag are not included in the checked out tree. 

Therefore, the 'right' solution is for my git repository to make sure
that the correct set of files is represented along each branch; a branch
consists of precisely those files that include the branch tag, no more
and no less.

So, any branch which is unique to one or the other original repository
will have the entire contents of the non-participating repository
removed at the first commit along that branch. This serves to reproduce
the CVS behaviour exactly; check out any version along that branch with
CVS and you'll see precisely the same resulting directory contents.

This doesn't just happen with 'illegal' CVS operations; you can create
precisely the same state by branching a sub-tree of the repository;
files outside that subtree are not tagged and hence don't exist along
that branch. You'll see that in the 'bcook-backend' branch where Brent
Cook made a branch in the neomagic subdirectory of hw/kdrive. The only
files present in that branch are the neomagic driver files, a perfectly
valid CVS state, if illogical in a global tree world.

keith.packard at
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 191 bytes
Desc: This is a digitally signed message part
URL: <>

More information about the xorg mailing list