Install and Configure Apache Subversion (SVN) on CentOS 7

Apache Subversion is also known as SVN, is an open source versioning & revision controlling program which helps in storing the present and past historic file versions like documents, source codes and web pages. SVN comes under Apache License.

In this article we will install & configure SVN on CentOS 7, which will act as SVN repository where authenticated users will be allowed to perform check-in and checkout operations.

Step:1 Install SVN & Apache Packages

SVN & Apache (http) package are available in the default CentOS 7 repository. Use below yum command to install required packages :

[[email protected] ~]# yum install httpd subversion mod_dav_svn

Step:2 Edit the configuration file of Apache Subversion

Add the below lines in the config file (/etc/httpd/conf.modules.d/10-subversion)

[[email protected] ~]# vi /etc/httpd/conf.modules.d/10-subversion.conf
Alias /svn /var/www/svn
<Location /svn>
DAV svn
SVNParentPath /var/www/svn/
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /etc/svn-auth-accounts
Require valid-user

Above settings will allow only the authenticated users to use SVN repository.

Step:3 Create SVN Users using htpasswd command

[[email protected] ~]# htpasswd -cm /etc/svn-auth-accounts linuxtechi
New password:
Re-type new password:
Adding password for user linuxtechi

In the above htpasswd command we have used ‘-c‘ & ‘-m‘ options. -c is used to create the password file ( /etc/svn-auth-accounts) and -m used to create MD5 encryption password for the user. To create second user remove the ‘-c’ from the above command otherwise it will overwrite existing file.

[[email protected] ~]# htpasswd -m /etc/svn-auth-accounts jack
New password:
Re-type new password:
Adding password for user jack

Step:4 Create & Configure SVN Repository

[[email protected] ~]# mkdir /var/www/svn
[[email protected] ~]# cd /var/www/svn/
[[email protected] svn]# svnadmin create repo
[[email protected] svn]# chown apache.apache repo/
Note : In case Selinux is enable then apply below selinux rules.
[[email protected] svn]# chcon -R -t httpd_sys_content_t /var/www/svn/repo/
[[email protected] svn]# chcon -R -t httpd_sys_rw_content_t /var/www/svn/repo/

Step:5 Start & enable the Apache (httpd) service

[[email protected] ~]# systemctl restart httpd.service
[[email protected] ~]# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/'
[[email protected] ~]#

Step:6 Try to access SVN repo from web browser.


In the browser just replace ip address with your SVN Server’s IP


Step:7 Disable anonymous access on SVN Repository

Edit the file – /var/www/svn/repo/conf/svnserve.conf, add the below two lines

## Disable Anonymous Access
anon-access = none

## Enable Access control
authz-db = authz

Step:8 Import Project Directory’s Content to SVN repository

Let’s first create Sample Project Directory and its file.

[[email protected] ~]# cd /mnt/
[[email protected] mnt]# mkdir linuxproject
[[email protected] mnt]# cd linuxproject/
[[email protected] linuxproject]# touch testfile_1 ; touch testfile_2

Now use SVN command to import linuxproject to the repo. As we have created sample linuxproject on the svn server itself.

[[email protected] linuxproject]# svn import -m "First SVN Repo" /mnt/linuxproject/ file:///var/www/svn/repo/linuxproject
Adding testfile_1
Adding testfile_2
Committed revision 1.

Now Check from the Browser


Step:9 Check Out the Project

In my case i want to checkout the linuxproject on my ubuntu laptop using SVN command. So to perform checkout operations please make your system has subversion package installed, if not then use “apt-get install subversion” command to install required package.

[email protected]:~$ mkdir svn_data
[email protected]:~$ pwd
[email protected]:~$ svn co /home/linuxtechi/svn_data/ --username jack
Authentication realm: <> SVN Repository
Password for 'jack': ********
ATTENTION! Your password for authentication realm:
<> SVN Repository
can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
Store password unencrypted (yes/no)? yes
A svn_data/testfile_1
A svn_data/testfile_2
Checked out revision 1.

Step:10 Committing Changes

After making required changes in the project code , we can commit the changes to the SVN repos. In My case i have created one more file in linuxproject folder.

[email protected]:~$ cd /home/linuxtechi/svn_data/
[email protected]:~/svn_data$ touch testfile_3
[email protected]:~/svn_data$ svn add testfile_3 --username jack
A testfile_3
[email protected]:~/svn_data$ svn commit -m "New File addedd" --username jack
Adding testfile_3
Transmitting file data .
Committed revision 2.
Note: While committing the changes if you are getting below error

svn: E000013: Commit failed (details follow):

svn: E000013: could not begin a transaction

Then to solve this error , make sure that apache user has read & write access to the entire repository.

[[email protected] repo]# chown -R apache:apache *
[[email protected] repo]# chmod -R 664 *

19 thoughts on “Install and Configure Apache Subversion (SVN) on CentOS 7”

  1. Nice article with well-explained procedure. BUT.
    The real tricky part for the source-control tools is the authentication. Especially if/when you want to open-up your server to the public.

    Obviously you (really) need to avoid storing your password unencrypted!

    The latest trend is to use SSH-keys instead of username/password. Is it possible with SVN?

  2. Hi.
    Directive Alias /svn /var/www/svn causes “svn: E195019: Redirect cycle detected for URL ‘http://….” error and you are unable to do checkout for example! Problem detected on Centos 7 , Server version: Apache/2.4.6 (CentOS), svn version 1.7.14

    # vi /etc/httpd/conf.modules.d/10-subversion.conf
    Alias /svn /var/www/svn

    Commenting out # Alias /svn /home/testsvn solves this problem – after a few hours of googling and pounding my head against the wall.

  3. Hello, I am following the tutorial and I think I’ve got it all right. But now I do not interpret php files, if I agree to index.php is downloaded to my computer, it seems that does not recognize the php, but if I access the HTML if it looks good.
    Do you know if I have to set something else to see the php?
    Thank you !!

  4. hello…
    very nice tutorial but only one thing is in step 8 when i try to import i am getting a error E205000:Invalid URL…. please help me

    1. Can you give me the full command which you are trying to run to import sample project. In my Case i am using file

  5. The result of: svn import -m “First SVN Repo” /mnt/linuxproject
    svn import -m “First SVN Repo” –username MYUSER–password MYPASSWORD /mnt/linuxproject
    results in this console output:
    svn: E205000: Try ‘svn help’ for more info
    svn: E205000: Invalid URL ‘/mnt/linuxproject’

    1. Never mind. I figured out the problem. It works when we append the URL of the server, for example:
      #svn import -m “First SVN Repo” –username MYUSER –password MYPASSWORD /mnt/linuxproject ‘http://MYSERVER/svn/repo’
      (above should show hyphen hyphen before username and password switches; if it shows long dash, it really should be hyphen hyphen)

    2. svn import is giving me this error:
      svn: E175011: Repository moved permanently to ‘http://MYSERVER/svn/repo’; please relocate

  6. Praveen S. Kumar

    Excellent writeup. We were using subversion in ClearOS 6.8. Recently we upgraded to ClearOS 7.3. Ran into an issue and while looking it up came across your article. We are able to follow the steps and checkout and commit changes. However not able to connect from TortoiseSVN client on windows. When we try to connect to repo, it prompts for the password, and after that its waits for a while before finally giving an error “Error running context. The server unexpectedly closed the connection”. Any thoughts as to what might be going on?

    1. Hi Parveen,

      We have not tested these steps on ClearOS 7.3, For the basic troubleshooting make sure required permissions are set on the Project, SELinux rules should be properly set in case it is enabled and check the Apache logs for errors

  7. Hi ,

    I followed the same procedure . I have not got any error while doing .

    After runnig this commnand — > systemctl enable httpd.service
    Got this output
    Created symlink from /etc/systemd/system/ to /usr/lib/systemd/system/ httpd.service.

    but still am not able to access svn repo

    am getting this error

    Not Found
    The requested URL /svn/repo was not found on this server.

    Can someone suggest me what needs to be changed . if there problem with my machine .

  8. Hi there,

    I am currently moving from Windows SVN to CentOS 7

    I have a folder which contains the all the users designated to each repo.

    I have imported it into CentOS.

    My question is, where do i put this file? I checked “svn-auth-accounts” and I just have the one user which i created, and the password is hashed.

    Where is the file that contains the groups?

Leave a Reply

Your email address will not be published. Required fields are marked *