Keep FTP folder synchronized with Windows folder
I'm trying to get my Continuous Integration system working from start to finish in the dev environment.
Unfortunately, the last step after publish is copying the folder to an offsite server which I can only access via FTP.
I'd like to have a service running that watches a local folder, and if it changes, updates the FTP server with those changes.
I can't seem to find something to accomplish this in Windows.
There is free open source WinSCP FTP client, which has all kinds of features for this.
The command you are looking for is in the "Commands" menu and is called "Keep remote directory up to date".
There is scripting support available as well via the keepuptodate
command.
Try the freeware version of SyncBack. It doesn't do realtime folder monitoring, but you can schedule it to sync at specified intervals. Set it to something low like 1 minute.
Free and open source solution based on git:
Use git-ftp for synchronization. After installation and setting up a local git repository you can do:
- git ftp init -u < user> -P ftp://host.example.com/public_html #for pushing the first time
- git ftp push --user < user> --passwd < password> ftp://host.example.com/public_html
Now you just need to watch for filesystem changes, add them to your local git repository and push your repository using the above command.
Advantages:
- git-ftp works on windows and linux (tested with mysys git on windows)
- integrates nicely into your development setup if you're already using git
- very easy to setup and use (if you're familiar with git)
- incremental changes -> saves a lot of bandwidth
Disadvantages:
- you need to find a solution to watch for filesystem changes (shouldn't be too hard to do, e.g. nodejs has solutions for this)
Here's an example for a batch file i'm using on windows:
@echo off
git init .
git add . --all
git commit -am "auto commit"
set /p pwd= Please enter ftp password:
git ftp push --user myftpuser --passwd %pwd% ftp://myftphost.com/myfolder
Note that this is an interactive example, but you could make it noninteractive by storing the password in the batch file.