/synd

Opinionated rsync wrapper that respects gitignore files

Primary LanguageTypeScript

Synd

npm version CI License: MIT install size Coverage Status

Opinionated rsync wrapper written in javascript.

Install

npm install --global synd

Usage

Create a ~/synd.config.js file in your home directory with a configuration preset for your project.

module.exports = {
    // remote sync
    presetName: {
        src: '/Users/yourUserName/path/to/a/project/to/sync/',
        dest: '/home/yourUserName/path/to/dir/to/sync/to',
        server: 'your.company.org'
    },
    // local sync
    anotherPreset: {
        src: '/Users/yourUserName/path/to/another/project/to/sync/',
        dest: '/Users/yourUserName/path/to/another/dir'
    }
};

To start sync process run the following

synd presetName

Preset Options

Name Type Default Description
src {String} Absolute path to the directory you want to sync
dest {String} Absolute path to the directory you want to sync to
server {String} Name of the server you want to sync to
initSync {Boolean} false Enables/Disables syncing upon program start
watch {Boolean} true Enables/Disables watching for file/directory changes
globalGitignore {Boolean} false Enables/Disables using global .gitignore for syncing
localGitignore {Boolean} false Enables/Disables using local .gitignore for syncing
showRsyncCommand {Boolean} false Enables/Disables displaying rsync command upon start
parseOutput {Boolean} false Enables/Disables attempting to parse rsync output
include {String[]} false Paths to include
exclude {String[]} false Paths to exclude

src

if ends with a slash it's contents will be synced into dest directory.

Example: '/users/anon/path/to/project/'

server

Optional. If you want to sync to a remote machine. You need to specify the server name.

Example: 'machine.host.org'

initSync

By default synd waits for a file change to start syncing, set to true to start syncing upon running synd <presetName>.

Example: true

gitignores

You can use your project and global gitignore to generate rsync filter file to avoid syncing not wanted files.

Example: true

showRsyncCommand

Synd uses rsync under the hood to sync your files. If you want to see what commands it generates set it to true.

Example: true

include

Use this option to specify additional rules to include files to syncing process which otherwise would not be synced.

Example: ['**/test']

exclude

Use this option to specify additional rules to exclude files from syncing process which otherwise would be synced.

Example: ['**/.DS_Store', '**/node_modules']

Notes

After you run synd it will generate a filter file for your project and place it in ~/.synd/presetName.[hash].filter. If file already exists synd will use it instead.

You can also see a list of all your presets by running

synd --list