atom-rsync package
atom-rsync is an Atom package to sync files bidirectionally between remote host and local over ssh+rsync. Inspired by Sublime SFTP.
This Atom package is a fork of the atom-sync package, which was abandoned around 2017 by the original author. This package picks up and applies the pull request #76 from the original repo.
This package is currently in early development and has only been tested on Mac. Please kindly try it out and provide feedback.
Feature
- Sync over ssh+rsync — still secure, but much faster.
- Multi-Folder Projects with different sync config files supported
- Triggers conditionally run commands after successful uploading
Prerequisite
- Ensure you have
ssh
andrsync
installed.
Quick Start
- Open a project folder to sync in Atom.
- Right click on the project folder and select
Sync
->Edit Remote Config
. - Edit and save the config file.
- Right click on the project folder and select
Sync
->Sync Remote -> Local
. - Watch water flows.
Notice
- Password based login is not supported—at least yet, you have to assign your key file and better host name in .ssh/config in advanced. Try to Simplify Your Life With an SSH Config File.
Config File (and Tutorial)
.sync-config.cson
remote:
host: "HOSTNAME", # server name or ip or ssh host abbr in .ssh/config
user: "USERNAME", # ssh username
path: "REMOTE_DIR" # e.g. /home/someone/somewhere
behaviour:
uploadOnSave: true # Upload every time you save a file
syncDownOnOpen: true # Download every time you open a file
forgetConsole: false # Never show console panel even while syncing
autoHideConsole: true # Hide console automatically after 1.5s
alwaysSyncAll: false # Sync all files and folders under the project \
# instead of syncing single file or folder
option:
deleteFiles: true # Delete files during syncing
autoHideDelay: 1500 # Time delay to hide console
exclude: [ # Excluding patterns
'.sync-config.cson'
'.git'
'node_modules'
'tmp'
'vendor'
]
flags: 'avzpur' # Advanced option: rsync flags
shell: 'ssh'
trigger: # Triggers fire after uploading file successfully
# which STARTS with following patterns
"*": "uptime" # Wildcard trigger for any file uploaded
"resources/scripts/coffee": [ # Any file under %PROJECT_ROOT%/resources/scripts/coffee \
# being uploaded will fire this trigger
"echo Compile coffeescript to js ..."
"coffee -b --output js/ --compile coffee/"
"ls public/js/|xargs -I@ echo \\t@" # You can also pipe commands but don't \
# forget to escape special characters
]
"resources/scripts/sass": [
"echo Compile sass to css ..."
"sass --update resources/scripts/sass:public/css"
]
Introduction to Trigger
Config
trigger:
"*": [
"echo \'<span class=warning>Every time you\\'ll see me</span>\'"
]
"coffee": [
"echo Compile coffeescript to js ..."
"mkdir -p js"
"coffee -b --output js/ --compile coffee/"
"ls js/|xargs -I@ echo \\t@"
]
"sass/style.sass": [
"echo Compile sass to css ..."
"mkdir -p css"
"sass --update sass:css"
]
Result
Suggestion
Trigger is implemented via ssh, it would be great to use triggers with SSH ControlMaster by transferring data through single ssh tunnel instead of making one ssh connection for rsync and another for ssh command, which could be very slow under unideal network speed or connection limits.
Config sample of ~/.ssh/config
Host *
ControlMaster auto
ControlPath ~/.ssh/ssh-%r@%h:%p
ControlPersist 10m
ServerAliveInterval 30
Keybindings
ctrl
+alt
+l
(Windows/Linux)cmd
+alt
+l
(Mac) Toggle log window
Known Problems
- You have to
Sync Local -> Remote
manually after renaming and deleting files.
Roadmap
- Listen to events
- Create folders
- Rename files/folders
- What about deleting?