I am a big fan of Capistrano and in general, software deployment tools. Capistrano works by connecting to your server, and updating the software there.
Most of my clients get their hosting from a shared server hosting package, where the server is shared amongst multiple people. This is great, as it lowers the cost of hosting tremendously, but also the number of features the server comes with is reduced. Most shared server hosting providers allow FTP.
Sadly Capistrano requires one to have SSH access to the server. Thus Capistrano, isn’t a feasible tool to use. Unable to find a substitute, I developed my own called git-deploy.
git-deploy will interact with git to only update relevant files on the server via FTP or SSH.
For example, if you only updated on file in your source code, you only need to upload one file, and not the whole directory. This makes uploading, more time and bandwidth efficient. Especially for time, as the script can be run from the command line, so you don’t need to launch your upload program, select which files to upload, drag and drog, and wait. A lot of time can be saved.
This is done by storing a file called REVISION on the server, which we can compare with on the local machine.
I am personally using it now on this website, and other production sites.
I am planning to create a Ruby Gem out of the plugin, but unfortunately the name git-deploy was taken. I am still looking for a new name, so if you have a suggestion, just drop me a comment.
git-deploy is licensed under an MIT License, so feel free to use, change, and build on top of my code.
To find out more about git-deploy, and how to set it up visit its GitHub page.
Happy Deploying!


Similar script git-deploy use only bash and lftp.
@Will
good question
‘git-deploy-diff’ could be a potential ruby gem name. since your script is deploying the diff between what is already there and the current head, it is still pretty descriptive…
I have read the README file, but I feel like I am still missing something. Where do I put the actual ‘git-deploy’ file in order to make this work?