Where did the committed file go

svn

I am trying to learn how to use subversion. On my mac os x server I have:

~/public_html (lots of files)

I also have /var/svn/myproject (this is the svn directory where I used svnadmin ~/public_html /var/svn/myproject)

On my MacBook Pro, I used svn checkout svn checkout svn://myserver/mysvnpath

It checks out the files.

I edit a file and put something simple in.

I commit and it gives no error and says I am at revision 2.

My question:

When I committed the updated file, where did it go on the server? I never see it changed in ~/public_html.

Where is my updated file on the server? I looked in the revision files and I can see 2 in revs has my change (which is just the addition of one line, phpinfo();).

Thank you for any help.

EDIT: based on comments I can see I really don't understand.

EDIT: I tried svn update in ~/public_html but my index.php file is never changed. Interestingly, I have another machine that I checked out the code and it shows the new revision (2). I just can't get it back into ~/public_html. If I have to manually copy it back to ~/public_html then how can I be sure the most current version is being used. What good is the repository at this point? I know it tracks changes but I want it to push out the latest version if I update my web directory on the server.

Best Answer

I think this SVN FAQ entry will help you: "I'm managing a website in my repository. How can I make the live site automatically update after every commit?":

This is done all the time, and is easily accomplished by adding a post-commit hook script to your repository. Read about hook scripts in Chapter 5 of the book. The basic idea is to make the "live site" just an ordinary working copy, and then have your post-commit hook script run 'svn update' on it.

In practice, there are a couple of things to watch out for. The server program performing the commit (svnserve or apache) is the same program that will be running the post-commit hook script. That means that this program must have proper permissions to update the working copy. In other words, the working copy must be owned by the same user that svnserve or apache runs as -- or at least the working copy must have appropriate permissions set.

If the server needs to update a working copy that it doesn't own (for example, user joe's ~/public_html/ area), one technique is create a +s binary program to run the update, since Unix won't allow scripts to run +s. Compile a tiny C program:

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h> 
int main(void) 
{
   execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/",
         (const char *) NULL);  
   return(EXIT_FAILURE);
}

... and then chmod +s the binary, and make sure it's owned by user 'joe'. Then in the post-commit hook, add a line to run the binary.

If you have problems getting the hook to work, see "Why aren't my repository hooks working?".

Also, you'll probably want to prevent apache from exporting the .svn/ directories in the live working copy. Add this to your httpd.conf:

# Disallow browsing of Subversion working copy administrative dirs.
<DirectoryMatch "^/.*/\.svn/">
Order deny,allow
Deny from all 


An alternative: You could use the in-place import. Look here how to do it.