Use a Subversion distribution appropriate to your system. The most current release (and the recommended one for PHP) is 1.6.3. The server is compatible with any SVN client, but we strongly recommend using at least 1.5.4.
To reiterate, use at least SVN 1.3.0 if you have no better choice, SVN 1.5.4 or better if at all possible, and preferably SVN 1.6.3.
Binaries and source for the latest SVN are available at http://subversion.tigris.org, and should also be available through your respective package manager if your system has one (MacPorts for MacOS X, ports for FreeBSD, portage for Gentoo, apt-get for Debian/Ubuntu, etc.). If you're on Windows, several good SVN clients are linked to from SVN's home page.
The SVN username and password file is generated from exactly the same sources as the CVS one. This means you can log into SVN with your CVS username and password. The SVN repository URL is http://svn.php.net. Accessing SVN through SSL (https://), the SVN protocol (svn://), or SSH (svn+ssh://) is not supported and will not work.
Due to technical limitations, if you have never logged into SVN before, you may have to log into a PHP system before SVN will accept your password. If you have this issue, it will take up to 15 minutes after you log in before SVN becomes aware of it. Use http://wiki.php.net/ or https://master.php.net/manage/users.php to log in. Logging into bugs.php.net will not work.
Files in the SVN repository are laid out very differently than they were in the CVS repository. Everything has been reorganized to better represent the categorization of modules by usage, and each module (or package in the cases of PEAR and PECL) now has "tags", "branches", and "trunk" directories. These represent CVS tags, CVS branches, and the CVS HEAD revision, respectively (more on this below). You can explore the structure of the repository with the 'svn ls' command, e.g.:
# the root directory of the repository $ svn ls http://svn.php.net/ # the list of tags available for php-src $ svn ls http://svn.php.net/php/php-src/tags/ # the contents of PEAR module XML_Util at HEAD $ svn ls http://svn.php.net/pear/packages/XML_Util/trunk
The top-level directories are:
Take a look at http://svnbook.red-bean.com/nightly/en/svn.forcvs.html if you know CVS but aren't familiar with SVN.
The SVNROOT operates quite differently from the CVSROOT you might be used to. For one, SVNROOT is NOT automatically managed by SVN itself; our hook scripts handle that instead. The files in here are mostly very different from CVSROOT's contents. What used to be called "avail" is now "global_avail".
The two avail files have the same format as the old CVS ones, with one exception: You can now use "*" and "?" wildcards in path matching. This is mostly useful for giving access to specific extensions in php-src across all tags and branches, such as "avail|gwynne|php/php-src/*/ext/mysql".
Be careful not to add any entries to the SVN avail that point to SVN externals. Since there aren't any externals right now, don't worry about it.
The old CVS loginfo file is replaced by the commit-email.php script. If you need to change where e-mail for a specific module goes, or add e-mailing of commits for a new module (by default all commits go to php-cvs@lists.php.net), this is the file to edit.
Do not touch the pre-commit or post-commit scripts!
A tremendous number of files in the PHP CVS use the $Id$ and $Revision$ keyword expansions that CVS provides automatically. SVN does NOT provide these automatically! You must add them yourself. The best way to do this is to edit your ~/.subversion/config file and set up your auto-props appropriately. If you've forgotten keywords for a single file, the "svn propset svn:keywords 'Id Revision Rev' filename" command is your friend. More information on this is at http://svnbook.red-bean.com/nightly/en/svn.advanced.props.html#svn.advanced.props.auto. My own config file looks like this, and these settings should be good enough for most uses:
[miscellany] log-encoding = utf-8 enable-auto-props = yes [auto-props] *.c = svn:eol-style=native;svn:keywords=Id Rev Revision *.cpp = svn:eol-style=native;svn:keywords=Id Rev Revision *.h = svn:eol-style=native;svn:keywords=Id Rev Revision *.m = svn:eol-style=native;svn:keywords=Id Rev Revision *.dsp = svn:eol-style=CRLF *.dsw = svn:eol-style=CRLF *.sh = svn:eol-style=native;svn:executable;svn:keywords=Id Rev Revision *.txt = svn:eol-style=native;svn:keywords=Id Rev Revision *.png = svn:mime-type=image/png *.jpg = svn:mime-type=image/jpeg Makefile = svn:eol-style=native *.php = svn:eol-style=native;svn:keywords=Id Rev Revision *.phpt = svn:eol-style=native;svn:keywords=Id Rev Revision *.sql = svn:eol-style=native;svn:keywords=Id Rev Revision *.tpl = svn:eol-style=native;svn:keywords=Id Rev Revision *.am = svn:eol-style=native;svn:keywords=Id Rev Revision *.in = svn:eol-style=native;svn:keywords=Id Rev Revision *.m4 = svn:eol-style=native;svn:keywords=Id Rev Revision *.s = svn:eol-style=native;svn:keywords=Id Rev Revision
However, the cvs2svn converter has set the svn:keywords of all existing textual files to "Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL". This is tremendous overkill which was designed with the goal in mind of catching unusual uses by old CVS-based code. If you find yourself actually using keywords other than $Id$ and $Revision$, you can add them to your auto-props or set them on a file-by-file basis.
To protect you, the pre-commit hook (which also checks avail files) will reject commits whose svn:keywords properties are unset on non-binary files.
It is not possible for the pre-commit hook to set these keywords automatically, period. This is a limitation in SVN itself, so don't ask me if I can work around it.
If you specifically do not want keywords replaced in a particular file that the pre-commit hook would reject, set svn:keywords to an empty string. The pre-commit hook doesn't look at the content of svn:keywords, only its presence.
All of this is only a worry for new files being added to the repository. All existing files in the repository already have svn:keywords set appropriately.