Hi, I am trying to understand the subversion repository filesystem and the document [url=http://subversion.tigris.org/files/documents/15/17/svn-design.html]Subversion Design[/url] helped a lot. There is something that is not yet clear to me: As I understand, SVN stores the latest version of a file as full-text and the ancestor as a reversed diff so that in order to checkout the ancestor, SVN first has to apply the reversed patch. Right? So far, everything's allright. But imagine the following situation: ------ svn add fileA svn commit Commmitted Revison 1 svn copy fileA fileB svn commit Committed Revision 2 svn status M fileA svn commit Committed Revision 3 ------ Now, obviously fileA (r3) is stored as fulltext. What about fileB (r2)? fileB is the newest version of fileB - so it should be stored as fulltext, too. fileA (r1) should be stored as diff to it's descendant. But to which descendent? Actually, both fileA (r3) and fileB (r2) are descendents of fileA (r1). the diff fileA (r1) against fileB (r2) would be empty, because these two files are identically, while the diff against fileA (r3) would reflect the changes made in revision 3. Now, which diff does subversion choose? Perhaps, someone could explain this or point me to a solution? And how does it go on when i commit changes to fileB and fileA later on? The reason I ask is that I am trying to rebuild a svn-like repository using SQL.