As I mentioned in my previous post I'm using Subversion to keep my SQL design, APEX application and all application serving files. Concurrent Versions System are not something new and they are must for big projects. Although I'm single person, I'm finding SVN very useful for many reasons:
- All my files are kept at one place. At any time I could checkout the whole application and deploy it on different server.
- I have a history (revisions) of my changes. If I know something worked yesterday I could just checkout the file from yesterday and get it working.
- Using APEXExport I'm doing daily backups of my applications.
- Oracle SQL Developer and SQL Data Modeler are easy to integrate with SVN.
- When the time comes, I'll create a branch, stable version of my application, by doing so I'll have at any time a working and stable copy of my application.
- Having branches I could still develop and improve the application itself, if a bug appears I'll be fixing it in the branch not in the main version (trunk).
- At any time more people could join the project and this would not stop the development process.
I saw today a tweet from Eddie Award about Subversion Best Practices: Repository Structure, so I recommend you to get familiar with SVN first, before start using it.
Usually I'm using Debian for CVS systems, but in this case I'm installing Subversion on OEL 5.6, the procedure is the same for OEL 6.x.
First of all you need to install web server and svn packages. Assuming you have a configured repository, this is how to installed the packages:
yum install httpd mod_dav_svn subversion
If you want to change specific parameters you could edit Apache configuration file /etc/httpd/conf.d/httpd.conf, otherwise it's not necessary.
Next you configure the SVN repository and authentication, the repository itself will be created next.
Edit file vi /etc/httpd/conf.d/subversion.conf and paste following:
<Location /svn> DAV svn SVNParentPath /var/www/svn SVNListParentPath on SVNIndexXSLT "/repos-web/view/repos.xsl" AuthType Basic AuthName "Oracle Repository authentication required" AuthUserFile /etc/httpd/conf.d/svn.users Require valid-user </Location>
Create users who can access the repository:
htpasswd -cm /etc/httpd/conf.d/svn.users oracle New password: Re-type new password: Adding password for user oracle [root@db ~]# cat /etc/httpd/conf.d/svn.users oracle:$apr1$9t19J...$hCF2GJTlizZfnPjKyk9rk/
Create the SVN repository:
mkdir /var/www/svn/ cd /var/www/svn/ svnadmin create oracle chown -R apache:apache oracle
Finally restart apache and make sure it starts after reboot:
/etc/init.d/httpd restart chkconfig httpd on
In case you see the following error then most probably you've omitted the SVNListParentPath parameter:
Could not fetch resource information. [403, #0]
(2)No such file or directory: The URI does not contain the name of a repository. [403, #190001]
These is also an issue if you use SVNListParentPath and AuthzSVNAccessFile, bug description and workaround could be found here.
Now you are ready to create you're first project and start using SVN to maintain the source code of your applications. Given the example, the access URL would be http://hostname/svn/oracle or locally svn info file:///var/www/svn/oracle/. For maintaining the code you could use TortoiseSVN, which is excellent client for Windows.
The parameter I specified early SVNIndexXSLT will define the repository style once opened in a web browser. In my case I used a package called repo-style, which could be found here.