
               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

         https://subversion.apache.org/

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

         $ svn co https://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:

         https://svn.code.sf.net/p/svnbook/source/trunk/
         
      If you wish to build the documentation from source, read the
      en/README file within the book source.



III.  PARTICIPATING IN THE SUBVERSION COMMUNITY

      First, read https://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:  https://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:

         https://github.com/mhagger/cvs2svn

      If you are running a Linux or BSD-based system, your distribution
      might have a cvs2svn package.

      If cvs2svn doesn't meet your needs, you might try refinecvs
      written by Lev Serebryakov:

        http://lev.serebryakov.spb.ru/refinecvs/

      Please note that cvs2svn and refinecvs are *separate* projects
      from Subversion.  If you have problems or are confused, contact
      the authors, 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.

