At my company, they still use ^svn^ and on top of that ^ftp^ and it was pain in the ass to upload files especially when client didn't have dedicated hosting or where there was no SSH access available. I did find some git-to-ftp or svn-to-ftp deployment tools but they were very slow because they uploaded each file individually.
I sat down over the weekend and came up with my own solution Floyer (shortened from FTPDeployer). It works with both
svn and is quit fast able to upload hundreds of files in few seconds. Other than FTP, it also supports SFTP.
How does it work
- It stores revision/commit hash on the server in a file when deployment is started.
- On next deployment, it compares local revision with remote one thereby able to deploy only the files changed between these two revisions.
- Once it knows what files to upload, it creates zip archive of these files to be deployed on the server.
- Rather than uploading each file individually (which is very slow process), it creates and uploads zip archive file to server where there is corresponding extract zip PHP script which extracts these files very fast. This script is also created and uploaded by Floyer.
- After deployment is finished, zip archive and extract script is deleted automatically.
Deploying by uploading and extracting archive file not only makes deployment fast but also we don't have to worry about some permission issues or creating new directories and so on because extract script runs from server itself thereby avoiding these issues.