Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Simple, Fast, One-Way, Sync Daemon, using SFTP — similar to the "Auto-Deployment" feature present in most IDEs
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
LICENSE
README.md
livesyncd.go
sftp.go
sync_event.go

README.md

livesyncd

livesyncd is a small One-Way Sync daemon, which operates in a similar way to an "Automatic Deployment" feature, present in most modern IDEs.

Get

Via go get:

go get github.com/CHH/livesyncd

Use

Prerequisities on the Server Side

  • The server needs the OpenSSH daemon running. On most Linux distributions installing the openssh-server or opensshd packages as well as starting the service will do.
  • Your computer of course needs access to the server via SSH, of course. I'm recommending adding your Public Key to the ~/.ssh/authorized_keys of the user you want to use for accessing the server.

Prerequisities on the Client Side

  • The sftp binary in your PATH.
  • Access to the remote server via SSH.

Starting to sync

livesyncd monitors a single directory tree (and all subdirectories) for changes and tries to mirror the directory structure on the remote side.

To use livesyncd you've to tell it at least the server (--remote-host) and the root directory for mirroring on the server (--remote-root).

% livesyncd --remote-host user@myserver --remote-root /tmp

The host name can be either a user@host string or a host as defined in your ~/.ssh/config.

Now try this in the working directory of livesyncd:

echo "foo" > foo.txt

Then wait a moment (typically under a second) and try:

% ssh user@myserver 'cat /tmp/foo.txt'

You should get a single foo as output from the server. This means the file is uploaded!

Now delete the local file:

% rm foo.txt

Try to cat the file again:

% ssh user@myserver 'cat /tmp/foo.txt'

You now should get:

cat: /tmp/foo.txt: No such file or directory

Known Issues

  • As for now only one directory can be mirrored. If you want to mirror more than one, start another instance in the other directory. This is due to restrictions of the number of open files per process at the OS level.
  • Creating directories can currently be not detected. As for now you will have to restart the daemon, to watch newly created directories.
  • Renaming is done by a "Put-Delete strategy", which means then whenever a file is renamed, it gets uploaded again with the new name and then the old file gets deleted on the server. This can be slow with a slow connection and large files.

Users of IntelliJ IDEA

TL;DR: Turn off "Save Write" in "Preferences > General".

IntelliJ IDEA includes a so called "Save Write" setting, which you can find in "Preferences -> General". When "Save Write" is turned on, then each time a file is saved, the new contents are written to a temporary file, then the old file is renamed to a temporary name and then the file containing the saved contents is renamed to the real file name.

I'm not far enough to detect this series of events, and so it can't mirror such changes on the remote host. So for using livesyncd, you've to turn off "Save Write".

License

livesyncd is licensed under the terms of the MIT License, which is bundled in the file LICENSE.

Something went wrong with that request. Please try again.