
               Subversion, a version control system.
               =====================================

$LastChangedDate$

Contents:

     I. A FEW POINTERS
    II. DOCUMENTATION
   III. PARTICIPATING IN THE SUBVERSION COMMUNITY
    IV. QUICKSTART GUIDE
     V. CONVERTING FROM CVS



I.    A FEW POINTERS

      For an overview of the Subversion project, visit

         http://subversion.apache.org/

      Once you have a Subversion client you can get the latest version
      of the code with the command:

         $ svn co http://svn.apache.org/repos/asf/subversion/trunk subversion



II.   DOCUMENTATION

      The main documentation is the Subversion Book - an on-line version
      can be found at:
      
         http://svnbook.red-bean.com/

      It is written in DocBook XML, and the sources can be found at:

         http://svn.red-bean.com/svnbook/
         
      If you wish to build the documentation from source, read the
      src/en/README file within the book source.



III.  PARTICIPATING IN THE SUBVERSION COMMUNITY

      First, read http://subversion.apache.org/docs/community-guide/
      It describes Subversion coding and log message standards, as well
      as how to join discussion lists.

      Talk on IRC with developers:  irc.freenode.net, channel #svn-dev.

      Read the FAQ:  http://subversion.apache.org/faq.html



IV.   QUICKSTART GUIDE

      See the final section of the first chapter of the Subversion Book.



V.    CONVERTING FROM CVS

      If you're a CVS user trying to move your CVS history over to
      Subversion, then be sure to visit the 'cvs2svn' project:

         http://cvs2svn.tigris.org

      You can get the latest released version of the cvs2svn converter
      from the project downloads area:

         http://cvs2svn.tigris.org/servlets/ProjectDocumentList?folderID=2976

      Please note that the cvs2svn project is a *separate* project from
      Subversion.  If you have problems with cvs2svn or are confused,
      please email the cvs2svn project's mailing lists, not the
      Subversion lists.

      Finally, be sure to see Appendix B in the Subversion Book.  It
      contains a very quick overview of the major differences between
      CVS and Subversion.

