Subversion Server Process Name on macOS

daemonssshsubversion

I'm running a Subversion server on MacOS. My remote IDEs connect no problem (using ssh tunneling). But, I can't figure-out the process name of the Subversion server.

It is so easy:

$ mkdir svnroot
$ svnadmin create /Users/johndoe/dev/svnroot
$ svn checkout svn+ssh://jdoe-macbook/Users/johndoe/dev/svnroot

But I go looking for the server as such:

$ sudo ps -eal | grep svn

doesn't return anything. And none of the processes listed in Activity Manager jump out at me as anything that might be a Subversion server.

To get ssh tunneling to work, I had to make adjustments to System Preferences –> Sharing. The ssh server is involved first. But then, what is ssh connecting to to manage the Subversion repositories?

Best Answer

When you tunnel over ssh using svn checkout svn+ssh://.., the svn client is actually running svnserve -q -t for the duration of each ssh connection and then shutting down svnserve when the connection closes.

If you want to see this in action, try opening two Terminal sessions:

  • In Terminal session 1, run an svn command with the svn+ssh:// protocol. Assuming you don't have any ssh identities saved in your ssh-agent, this should pause waiting for you to enter your password: svn checkout svn+ssh://localhost/Users/johndoe/dev/svnroot.

  • Now switch to Terminal session 2. You should be able to find at least one svnserve process open via: ps -ef | grep svnserve.

    For example, you should see a matching process similar to:

    501 12869 12856 0 6:06pm ttys001 0:00.03 ssh -q -- localhost svnserve -t

  • If you return to Terminal session 1 and either complete or abort the svn command, the associated ssh session and svnserve process will quit.

Note: if you are connecting to a local repository you can use the file:// protocol instead of tunnelling back into localhost via ssh.

For example: svn checkout file://localhost/Users/johndoe/dev/svnroot