Basic sync using Rsync
This extension syncs with a remote server using rsync
With these commands:
Sync-Rsync: Sync Local to Remote
Sync-Rsync: Sync Local to Remote (Single)
Sync-Rsync: Sync Remote to local
Sync-Rsync: Sync Remote to local (Single)
Sync-Rsync: Compare Local to Remote
(dry run)Sync-Rsync: Compare Remote to local
(dry run)Sync-Rsync: Kills the current sync
If no sync is running clicking the status bar item will show the output
If a sync is running clicking the status bar item will kill the running sync, see Windows Notes
Rsync installed both locally and remotely
If you are using wsl, wslpath maybe required. (Windows 10 1803 or higher). Or you can install this https://github.com/laurent22/wslpath/blob/master/wslpath which requires php.
If using cygwin, cygpath maybe required.
Overall Settings (all optional):
-
sync-rsync.notification
: Show notifiactions for sync successes (failurers always show notifications) -
sync-rsync.autoShowOutput
: Auto show rsync output when rsync is working. -
sync-rsync.autoShowOutputOnError
: Auto show rsync output on error. -
sync-rsync.autoHideOutput
: Auto hide rsync output when rsync is done. -
sync-rsync.onSave
: syncs entire local on save. -
sync-rsync.onSaveIndividual
: syncs the changed file on save (onSave takes presedence). (note: rsync error 3 is ignored because it might be excluded). -
sync-rsync.onLoadIndividual
: syncs the opened file on load. (note: rsync error 3 is ignored because it might be excluded). -
sync-rsync.executableShell
: The executable shell to run rsync in (e.g. /bin/bash). -
sync-rsync.executable
: The rsync executeable (e.g. rsync, C:\cygwin64\bin\rsync.exe). -
sync-rsync.cygpath
: If using cygwin, this is the path to cygpath (e.g. C:\cygwin64\bin\cygpath.exe) used to translate windows paths to cywgin. -
sync-rsync.watchGlobs
: Enables file system watcher on given glob patterns (may cause high CPU usage - use carefuly). -
sync-rsync.useWSL
: Use WSL for executing rsync. See Windows Notes -
sync-rsync.sitesUsesRegex
: Interpret localPath as regex (see example below)
Global site options (they will be used as the default for each site):
sync-rsync.local
: the local location defaults to workspace.sync-rsync.remote
: the rsync remote location e.g. user@remote:path.sync-rsync.delete
: true or false if you want rsync to delete files.sync-rsync.flags
: rsync flags.sync-rsync.showProgress
: show progress during rsync, by adding--progress
.sync-rsync.exclude
: rsync exclude patterns e.g. [".git",".vscode"] (includes happen before excludes) See Includes / Excludes.sync-rsync.include
: rsync exclude patterns e.g. ["/","**/.php] (includes happen before excludes) See Includes / Excludes.sync-rsync.shell
: Rsync's -e option e.g. ssh -p 1234.sync-rsync.chmod
: Rsync's --chmod option.sync-rsync.options
: Array of extra rsync options, set each element using rsync.set. See Extra Options.sync-rsync.args
: Array of extra arguments to append to rsync e.g.["--exclude=venv/", "--include=*/", "--include=**/*.py", "--exclude=*"]
.
Sites (Completely Optional, If no sites are defined Sync Rsync creates one using defaults):
sync-rsync.sites
: Multiple Site Support Multiple Sites.
For workspaces you have to define localPath
and remotePath
for each folder you want synced. e.g.
{
"folders": [
{
"path": "/home/user/project/s1"
},
{
"path": "/home/user/projects/t2"
}
],
"settings": {
"sync-rsync.sites": [
{
"localPath": "/home/user/project/s1/",
"remotePath": "user@server:/var/www/s1/"
},
{
"localPath": "/home/user/projects/t2/",
"remotePath": "user@server:/var/www/s2/"
}
]
}
}
Sites have these options, they are all optional sync-rsync will use the defaults if they are not defined:
name
: a Nickname for single site sync.upOnly
: this site only sync Local to Remote.downOnly
: this site only sync Remote to Local.localPath
: the local location defaults to workspace.remotePath
: the rsync remote location e.g. user@remote:path.deleteFiles
: true or false if you want rsync to delete files.flags
: rsync flags.exclude
: rsync exclude patterns e.g. [".git",".vscode"] (includes happen before excludes) See Includes / Excludes.include
: rsync exclude patterns e.g. ["/","**/.php] (includes happen before excludes) See Includes / Excludes.shell
: Rsync's -e option e.g. ssh -p 1234.preSyncUp
: a command to run before sync up (e.g. clear cache). First item in array is the command the rest are arguments. e.g. ['ssh','user@server','~/cr.sh'].postSyncUp
: a command to run after successful sync up (e.g. clear cache). First item in array is the command the rest are arguments. e.g. ['ssh','user@server','~/cr.sh'].preSyncDown
: a command to run before sync down (e.g. clear cache). First item in array is the command the rest are arguments. e.g. ['ssh','user@server','~/cr.sh'].postSyncDown
: a command to run after successful sync down (e.g. clear cache). First item in array is the command the rest are arguments. e.g. ['ssh','user@server','~/cr.sh'].chmod
: Rsync's --chmod option.options
: Array of extra rsync options, set each element using rsync.set. See Extra Options.args
: Array of extra arguments to append to rsync e.g.["--exclude=venv/", "--include=*/", "--include=**/*.tpl", "--exclude=*"]
.
localPath and remotePath will replace ${workspaceRoot} with the current Workspace Path
Example :
{
"sync-rsync.delete": true,
"sync-rsync.sites": [
{
"remotePath":"user1@server1:/path1/", // Sync sync-rsync.local to user1@server1:/path1/ using port 1234
"shell":"ssh -p 1234"
},
{
"remotePath":"user2@server2:/path2/", // Sync sync-rsync.local to user2@server2:/path2/
},
{
"localPath":"project/static/",
"remotePath":"user3server3:/static/", // Sync project/static/ to user3@server3:/static/
}
]
}
Example using sync-rsync.sitesUsesRegex
:
Interpret localPath strings as regex. This allows capturing tokens and using them in remotePath.
{
"sync-rsync.sitesUsesRegex": true,
"sync-rsync.sites": [
{
"localPath": "/sites/(?<hostname>[^/]+)/(?<site>[^/]+)/",
"remotePath": "user@{hostname}:/var/www/{site}/public/",
// will
// sync /sites/aHost/mydomain/ to user@aHost:/var/www/mydomain/public/
// sync /sites/aHost/otherDomain/ to user@aHost:/var/www/otherDomain/public/
// sync /sites/otherHost/otherDir/ to user@otherHost:/var/www/otherDir/public/
}
]
}
The options
array is an array of arrays rsync.set is call with each array spread as paramamiters e.g:
"sync-rsync.options": [
['progress'],
['exclude-from', '/path/to/exclude-file'],
['delete'],
]
Includes happen before Excludes, this is important because rsync handles a file based on first match, so for example to only upload php files:
{
"sync-rsync.exclude":[
"*"
],
"sync-rsync.include": [
"*/",
"**/*.php"
],
}
if you need more control use sync-rsync.args
If using cywgin, sync-rsync.cygpath
is needed for things like onSaveIndividual
to work because cygwin uses diferent paths as windows.
Here is as example config:
{
"sync-rsync.executable": "/bin/rsync",
"sync-rsync.shell": "/bin/ssh -p 2222",
"sync-rsync.remote": "root@server:/root/test/",
"sync-rsync.local": "c:\\Users\\root\\sync_test\\",
"sync-rsync.onSaveIndividual": true,
"sync-rsync.cygpath": "C:\\cygwin64\\bin\\cygpath.exe",
"sync-rsync.executableShell": "C:\\cygwin64\\bin\\bash.exe"
}
Here is and example config for WSL:
{
"sync-rsync.remote": "root@server:/root/folder/",
"sync-rsync.local": "/mnt/c/Users/root/folder/",
"sync-rsync.useWSL": true
}
If you are using the shell
option to do something like ssh -p 123
you will most likely have the set sync-rsync.executableShell
to /bin/bash